hdu 1269

来源:互联网 发布:传奇技能数据库计算 编辑:程序博客网 时间:2024/06/09 23:15

OJ

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <vector>#include <map>#include <set>#include <string>#include <cstring>#include <list>#include <queue>#include <stack>#include <cmath>using namespace std;#define PF(x) (scanf("%d",&x))#define PT(x,y) (scanf("%d%d",&x,&y))#define PR(x) (printf("%d\n",x))#define PRT(x,y)(printf("%d %d\n",x,y))#define PB(x)(scanf("%I64d",&x))#define PRB(x)(printf("%I64d\n",(x)))#define N 10005#define M 10000#define Mod 1000int n,m,k;vector<int> G[N];vector<int> Gb[N];int vis[N];int finish[N];int t;void reinit(){for(int i=0;i<=n;i++)if(!G[i].empty()) G[i].clear();for(int i=0;i<=n;i++)if(!Gb[i].empty()) Gb[i].clear();memset(vis,0,sizeof(vis));t = 0;memset(finish,0,sizeof(finish));}void dfs(int v){t ++;for(int i=0;i<(int)G[v].size();i++){if(!vis[G[v][i]]){vis[G[v][i]] = 1;dfs(G[v][i]);}}finish[v]= t++;}void redfs(int v){for(int i=0;i<(int)Gb[v].size();i++)if(!vis[Gb[v][i]]){vis[Gb[v][i]] = 1;redfs(Gb[v][i]);}}void init(){while(scanf("%d%d",&n,&m)!=EOF &&(m+n!=0)){//if(n==0 && m == 0) break;reinit();for(int i=0;i<m;i++){int x,y;PT(x,y);G[x].push_back(y);Gb[y].push_back(x);}bool flag = false;if(n==1) {puts("Yes");continue;}for(int i=1;i<=n;i++)if(!vis[i]){vis[i]=1;dfs(i);}/*for(int i=1;i<=n;i++)if(!vis[i]){flag = true;break;}if(flag) {puts("no");continue;}*/int maxx = -1;int index = -1;for(int i=1;i<=n;i++)if(finish[i]>maxx)  {maxx = finish[i];index = i;}memset(vis,0,sizeof(vis));vis[index]=1;redfs(index);for(int i=1;i<=n;i++)if(!vis[i]){flag = true;break;}if(flag) puts("No");else puts("Yes");}return ;}int main(){init();return 0;}


原创粉丝点击