#include #include #include using namespace std; using ll=long long; int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int n,m; cin>>n>>m; vector>> graph(2*n); atcoder::scc_graph g(2*n); for(int i=0;i>u>>v>>c; u--;v--; graph[u].push_back(make_pair(v+n,2*c-1)); graph[u+n].push_back(make_pair(v,1-2*c)); g.add_edge(u,v+n); g.add_edge(u+n,v); } auto sccs=g.scc(); int k=sccs.size(); int inf=1e9; vector pot(2*n,inf); vector sccid(2*n,-1); // そのSCCに非零閉路が存在するかどうか vector bad(k); vector>> biggraph(k); for(int i=0;ibool{ for(auto[y,w]:graph[x]){ if(sccid[y]!=i)continue; if(pot[y]==inf){ pot[y]=pot[x]+w; if(dfs(dfs,y))return true; }else if(pot[y]!=pot[x]+w)return true; } return false; }; if(dfs(dfs,scc[0]))bad[i]=true; } for(int i=0;i reached(k); vector maxdp(k,-inf),mindp(k,inf); reached[sccid[0]]=true; maxdp[sccid[0]]=-pot[0]; mindp[sccid[0]]=-pot[0]; for(int i=0;i