hdu 1285 一直wa ,不明白为什麽?

2025-04-24 21:29:54
推荐回答(2个)
回答1:

你这个结果不是按照字典序的,每找到一个就应该从头寻找

回答2:

有重复的有向边,把重复的忽略就可以了
#include
using namespace std;
#define max 501
int arc[max][max];
int vis[max];
int in[max];
int p[max];
int c;
void topsort(int i,int n)
{
vis[i]=1;
p[c++]=i+1;
int j;
for (j=0; j if (arc[i][j]) in[j]--;
for(j=0;j if(!vis[j] && !in[j])
{
topsort(j,n);
break;
}
return;
}
int main()
{
int n,m;
while(cin>>n>>m)
{
c=0;
int x,y;
int i,j;
memset(arc,0,sizeof(arc));
memset(in,0,sizeof(in));
memset(vis,0,sizeof(vis));
for(i=0;i {
cin>>x>>y;
if(arc[x-1][y-1]==0) // 如果此边没有被读过
{
arc[x-1][y-1]=1;
in[y-1]=in[y-1]+1;
}
}
for(i=0;i if(!vis[i] && !in[i])
{
topsort(i,n);
break;
}

for(i=0;i cout< }
return 0;
}