| ||||||||||
| 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 | |||||||||
到底为啥RE……求真相……(附代码=。=)#include<iostream>
#include<cstdio>
#include<cstring>
#define MAX 1010
#define MAXN 10000
using namespace std;
int cnt;
struct edge
{
int v;
edge * next;
};
struct Graph
{
edge memory[MAXN];
edge * head[MAX];
int dfn[MAX],low[MAX],S[MAX],inS[MAX];
int TOP,index,sp;
void init(int n)
{
int i;
TOP=-1;
for(i=1;i<=n;i++)
head[i]=NULL;
}
void addedge(int u,int v)
{
edge * ptr=&memory[++TOP];
ptr->v=v;
ptr->next=head[u];
head[u]=ptr;
}
void DFS(int u,int * ID)
{
dfn[u]=low[u]=++index;
inS[u]=1;
S[++sp]=u;
for(edge * ptr=head[u];ptr;ptr=ptr->next)
{
int v=ptr->v;
if(!dfn[v])
{
DFS(v,ID);
if(low[u]>low[v])
low[u]=low[v];
}
else if(inS[v]&&dfn[v]<low[u])
low[u]=dfn[v];
}
if(dfn[u]==low[u])
{
int v=S[sp--];inS[v]=1;ID[v]=cnt;
while(u!=v)
{
v=S[sp--];inS[v]=1;ID[v]=cnt;
}
cnt++;
}
}
void Tarjan(int n,int * ID)
{
int i;
cnt=0;index=0;sp=-1;
for(i=1;i<=n;i++)
dfn[i]=0;
for(i=1;i<=n;i++)
if(!dfn[i])
DFS(i,ID);
}
};
int G[MAX][MAX];
int main()
{
Graph mt;
int T,n,m,i,s,t,error,x,p,front,rear;
int u[MAXN],v[MAXN],ID[MAX],in[MAX];
int q[MAX],vis[MAX];
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(G,0,sizeof(G));
memset(in,0,sizeof(in));
mt.init(n);
for(i=0;i<m;i++)
{
scanf("%d%d",&s,&t);
mt.addedge(s,t);
u[i]=s;v[i]=t;
}
mt.Tarjan(n,ID);
for(i=0;i<m;i++)
{
int x=u[i],y=v[i];
if(ID[x]!=ID[y])
{
if(!G[ID[x]][ID[y]])
{
G[ID[x]][ID[y]]=1;
in[ID[y]]=1;
}
}
}
error=0;t=0;
for(i=0;i<cnt;i++)
if(in[i]==0)
{
if(!t){t=1;x=i;}
else {error=1;break;}
}
if(!error)
{
memset(vis,0,sizeof(vis));
q[0]=x;
vis[x]=1;
front=0;rear=1;
while((front<rear)&&!error)
{
s=q[front++];
p=0;
for(t=0;t<cnt;t++)
{
if(G[s][t]&&!vis[t])
{
in[t]--;
if(in[t]==0)
{
if(!p)
{
p=1;
q[rear++]=t;
vis[t]=1;
}
else {error=1;break;}
}
}
}
}
}
if(!error)printf("Yes\n");
else printf("No\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator