Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define PB push_back
- #define ZERO (1e-10)
- #define INF (1<<29)
- #define CL(A,I) (memset(A,I,sizeof(A)))
- #define DEB printf("DEB!\n");
- #define D(X) cout<<" "<<#X": "<<X<<endl;
- #define EQ(A,B) (A+ZERO>B&&A-ZERO<B)
- typedef long long ll;
- typedef long double ld;
- typedef pair<ll,ll> pll;
- typedef vector<int> vi;
- typedef pair<int,int> ii;
- typedef vector<ii> vii;
- #define IN(n) int n;scanf("%d",&n);
- #define FOR(i, m, n) for (int i(m); i < n; i++)
- #define REP(i, n) FOR(i, 0, n)
- #define F(n) REP(i, n)
- #define FF(n) REP(j, n)
- #define FT(m, n) FOR(k, m, n)
- #define aa first
- #define bb second
- void ga(int N,int *A){F(N)scanf("%d",A+i);}
- #define MX (100005)
- vi g[MX],G[MX],e[MX],R[MX];
- int cn[MX],C[MX],I[MX],H[MX],L;
- void CLR(int N=MX){L=0;F(N)g[i].clear(),e[i].clear(),G[i].clear(),R[i].clear(),cn[i]=I[i]=0;}
- void dfs1(int x){
- cn[x]=1;
- for(auto h:g[x])if(!cn[h])dfs1(h);
- H[L++]=x;
- }
- void dfs2(int x,int c){
- cn[x]=0,C[x]=c;
- for(auto h:e[x])if(cn[h])dfs2(h,c);
- }
- #define ADD(A,B) (g[A].PB(B),e[B].PB(A))
- int ini(int N){
- F(N)if(!cn[i])dfs1(i);
- int I(0);
- for(int i(L-1);~i;--i)if(cn[H[i]])dfs2(H[i],++I);
- F(N)for(auto&h:g[i])if(C[i]!=C[h])G[C[i]-1].PB(C[h]-1),R[C[h]-1].PB(C[i]-1);
- //F(I)sort(G[i].begin(),G[i].end()),unique(G[i].begin(),G[i].end());//not necessary
- return I;
- }
- int main(void){
- int N,M,a,b,c;
- while(scanf("%d%d",&N,&M),N){
- CLR(N);
- F(M){
- scanf("%d%d%d",&a,&b,&c),--a,--b;
- ADD(a,b);
- if(c-1)ADD(b,a);
- }
- putchar_unlocked(48+(ini(N)==1));
- putchar_unlocked(10);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment