#include<bits/stdc++.h> using namespace std;

const int MAXN = 1919 + 810;

int n, m, tot, head[MAXN]; pair<int, int> edge[MAXN * MAXN];

void addEdge(int u, int v) { edge[++tot] = {v, head[u]}; head[u] = tot; }

int top, cnt, dfc, dfn[MAXN], low[MAXN], stck[MAXN]; bool vis[MAXN];

void tarjan(int u) { dfn[u] = low[u] = ++dfc; stck[++top] = u; vis[u] = true; for(int i = head[u]; i; i = edge[i].second) { int v = edge[i].first; if(!dfn[v]) tarjan(v), low[u] = min(low[u], low[v]); else if(vis[v]) low[u] = min(low[u], low[v]); } if(dfn[u] == low[u]) { cnt++; for(int v = stck[top]; top--; v = stck[top]) { vis[v] = false; if(u == v) return ; } } }

int main() { while(scanf("%d%d", &n, &m) && (n || m)) { memset(head, 0, sizeof head); tot = 0; while(m--) { int u, v; scanf("%d%d", &u, &v); int op; scanf("%d", &op); if(op == 1) addEdge(u, v); else addEdge(u, v), addEdge(v, u); } memset(dfn, 0, sizeof dfn); memset(low, 0, sizeof low); memset(vis, false, sizeof vis); cnt = dfc = top = 0; for(int i = 1; i <= n && cnt < 2; i++) { if(!dfn[i]) tarjan(i); } printf("%d\n", cnt == 1); } return 0; }

将变量名改的更简洁同时改正错误:#includebitsstdc++husing namespace std;const int N = 1919 + 810;int n m tot headN;paitint int edgeN N;void Addint u int v 	edge++tot = vheadu;	headu = tot;int top cnt dfc dfnN lowN st

原文地址: http://www.cveoy.top/t/topic/i7tl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录