int main() { int m, i, n; int s,t,c; while(~scanf("%d%d",&m,&n)) { M = 0; memset(head,-1,sizeof(head)); memset(vis,0,sizeof(vis)); for(i = 0; i < n; i++) { scanf("%d%d%d",&s,&t,&c); add(s,t,c); } for(i = 1; i <= m; i++) { if(!vis[i]&&!dfs0(i,-1))break; } if(i <= m){ printf("YES\n"); } else { ans = 0; for(i = 1; i <= m; ++i){ if(vis[i]){ dfs(i,-1); } } printf("%d\n",ans); } } return 0; }
int main() { freopen("folding.in", "r", stdin); freopen("folding.out", "w", stdout); for (int i = 0; i < 15; scanf("\n"), i++) for (int j = 0; j < 15; j++) { char ch = getchar(); if (ch != '.') { int k = 0; for (; sym[k] != ch; k++); x[k] = i, y[k] = j; } } int td; for (int i = 1; i < 27; i++) { int d = 0; for (; d < 6; d++) if (x[i] == x[i-1]+dx[d] && y[i] == y[i-1]+dy[d] && dz[d] == 0) break; if (i > 1) f[i] = (d != td); td = d; } dfs0(); for (int i = 0; i < 3; i++) for (int j = 0; j < 3; putchar(" \n"[j == 2]), j++) for (int k = 0; k < 3; k++) putchar(sym[a[i][j][k]]); return 0; }
bool dfs0(int u,int pre){ int v; vis[u] = 1; for(int i = head[u]; i != -1; i = edge[i].next){ v = edge[i].v; if(v == pre)continue; if(vis[v] || !dfs0(v,u) )return 0; } return 1; }
int dfs0(int node, int pa) { int ans = value[node]; for (int e = nrbegin[node]; e; e = nrnext[e]) { int son = nrto[e]; if (son == pa) continue; ans += std::max(0, dfs0(son, node) - 2 * cost[nredge[e]]); } return dp0[node] = ans; }
/* 简单遍历 */ void dfs0(int h, int k) { int i; v[k] = 1; for (i = 0; i < h; i++) { printf("\t"); } printf("%d \n", k); for (i = 0; i < n; i++) { if (!v[i] && G[k][i]) { dfs0(h+1, i); v[i] = 0; } } }
inline void do_dp0() { dfs0(1, 0); }