Pagini recente » Cod sursa (job #1232717) | Cod sursa (job #1865403) | Cod sursa (job #2953215) | Cod sursa (job #1887422) | Cod sursa (job #517575)
Cod sursa(job #517575)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <bitset>
using namespace std;
#define N 110
#define M 1010
#define fs first
#define sc second
#define mp make_pair
#define pii pair< int,int >
int n,m;
pair< pii,int > cer[M];
bitset< N > rez;
inline void citire() {
scanf("%d%d",&n,&m);
for(int i=1; i<=m; ++i)
scanf("%d%d%d",&cer[i].fs.fs,&cer[i].fs.sc,&cer[i].sc);
}
inline bool vezi(int x) {
int a = cer[x].fs.fs;
int b = cer[x].fs.sc;
if(cer[x].sc==0)
return (rez[a]==1 || rez[b]==1);
if(cer[x].sc==1)
return (rez[a]==1 || (rez[a]==0 && rez[b]==0));
if(cer[x].sc==2)
return (rez[b]==1 || (rez[a]==0 && rez[b]==0));
return (rez[a]==0 || rez[b]==0);
}
inline void rezolva() {
srand(time(NULL));
int cati0 = n,unde;
bool go = true,ok;
int a,b;
while(go) {
ok = true;
for(int i=1; i<=m && ok; ++i) {
if(vezi(i)==false) {
unde = i;
ok = false;
}
}
if(ok==false) {
a = cer[unde].fs.fs;
b = cer[unde].fs.sc;
if(rand()&1) {
rez[a] = ( (rez[a]==1) ? (0) : (1) );
if(rez[a]==0)
++cati0;
else
--cati0;
} else {
rez[b] = ( (rez[b]==1) ? (0) : (1) );
if(rez[b]==0)
++cati0;
else
--cati0;
}
continue;
}
if(cati0==n) {
a = rand()%n + 1;
rez[a] = 1;
--cati0;
continue;
}
go = false;
}
}
inline void scrie() {
int nrez = 0;
for(int i=1; i<=n; ++i) {
if(rez[i]==1)
++nrez;
}
printf("%d\n",nrez);
for(int i=1; i<=n; ++i) {
if(rez[i]==1)
printf("%d\n",i);
}
}
int main() {
freopen("party.in","r",stdin);
freopen("party.out","w",stdout);
citire();
rezolva();
scrie();
return 0;
}