#include #include #include #include #include #include #include #include #include #include #define in cin #define out cout #define FOR(i, a, b) for(int i = a; i <= b; ++i) using namespace std; typedef long long ll; const int INF = 0x3f3f3f3f; const int Nmax = 100001; vector G[Nmax],Gt[Nmax],C[Nmax],Comp[Nmax]; int N,M,K,m[Nmax],f[Nmax]; int X[3*Nmax],Y[3*Nmax],Cost[3*Nmax]; void dfs1(int x){m[x]=1;for(vector::iterator it=G[x].begin();it!=G[x].end();++it) if(!m[*it]) dfs1(*it);f[++f[0]]=x;} void dfs2(int x){Comp[K].push_back(x);m[x]=1;for(vector::iterator it=Gt[x].begin();it!=Gt[x].end();++it) if(!m[*it]) dfs2(*it);} int pof[Nmax],est[Nmax]; int inq[Nmax],D[Nmax],Much[Nmax]; int Tat[Nmax]; queue q; int c_n(int p,int much){ while(!q.empty()) q.pop(); q.push(p); inq[p]=1; D[p]=0; while(!q.empty()){ int x=q.front(); q.pop(); inq[x]=-inq[x]; for(int i=0;i>N>>M; for(int i=1;i<=M;i++){ in>>X[i]>>Y[i]>>Cost[i]; G[X[i]].push_back(Y[i]); Gt[Y[i]].push_back(X[i]); } for(int i=1;i<=N;i++) if(!m[i]) dfs1(i); for(int i=1;i<=N;i++) m[i]=0; for(int i=N;i>=1;i--) if(!m[f[i]]) K++,dfs2(f[i]); for(int i=1;i<=K;i++) for(vector::iterator it=Comp[i].begin();it!=Comp[i].end();++it) pof[*it]=i; for(int i=1;i<=N;i++) m[i]=0,D[i]=INF,G[i].clear(); for(int i=1;i<=M;i++){ if(pof[X[i]]==pof[Y[i]]){ G[X[i]].push_back(Y[i]); C[X[i]].push_back(Cost[i]); Much[pof[X[i]]]++; } } for(int i=1;i<=K;i++){ est[i]=c_n(Comp[i].back(),Much[i]); } for(int i=1;i<=N;i++) G[i].clear(); for(int i=1;i<=M;i++){ if(pof[X[i]]!=pof[Y[i]]){ G[pof[Y[i]]].push_back(pof[X[i]]); Tat[pof[X[i]]]++; } } while(!q.empty()) q.pop(); for(int i=1;i<=K;i++) if(!Tat[i]) q.push(i); while(!q.empty()){ int x=q.front(); q.pop(); inq[x]=-inq[x]; for(int i=0;i