Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
无语了《《《help#include<stdio.h> #include<string.h> #define CLR(x) memset(x, 0, sizeof(x)) #define MIN(a, b) a < b ? a : b #define V 1005 void init(); void tarjan(); int top_sort(); void creat_newg(); void solve(); int t, n, m, id, cnt, top; short int scc[V], s[V], ins[V], dfn[V], low[V]; short int in[V]; short int g[V][V]; short int newg[V][V]; int main() { freopen("Poj 2762", "r", stdin); scanf("%d", &t); while(t--){ init(); solve(); } return 0; } void init() { CLR(dfn); CLR(ins); CLR(in); CLR(g); CLR(newg); id = cnt = top = 0; } void tarjan(int src) { int i, poj; dfn[src] = low[src] = ++id; s[++top] = src, ++ins[src]; for(i=1; i<=n; ++i){ if(g[src][i]){ if(!dfn[i]){ tarjan(i); low[src] = MIN(low[src], low[i]); }else if(ins[i]) low[src] = MIN(low[src], dfn[i]); } } if(low[src] == dfn[src]){ ++cnt; do{ poj = s[top--]; scc[poj] = cnt; ins[poj] = 0; }while(poj != src); } } int top_sort() /* 对新图拓朴*/ { int i, j, k; for(i=1, top=0; i<=cnt; ++i) if(!in[i]) s[++top] = i; if(!top) return 1; /* 强联通*/ for(i=1; i<=cnt; ++i){ if(top == 1){/* 存在一条连,則每次应只有一个入度零点*/ j = s[top--]; for(k=1; k<=cnt; ++k) if(newg[j][k]){ if(!(--in[k])) s[++top] = k; } }else break; } return i > cnt ? 1 : 0; } void creat_newg() { int i, j; CLR(in); for(i=1; i<=n; ++i){ /* 枚举入口*/ for(j=1; j<=n; ++j){ if(g[j][i] && scc[j] != scc[i]){ if(!newg[scc[j]][scc[i]]){ newg[scc[j]][scc[i]] = 1; ++in[scc[i]]; } } } } } void solve() { int i, x, y; scanf("%d%d", &n, &m); for(i=1; i<=m; ++i){ scanf("%d%d", &x, &y); g[x][y] = 1; } tarjan(1); creat_newg(); puts(top_sort() ? "Yes" : "No"); } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator