为什么有两个测试点无法通过
查看原帖
为什么有两个测试点无法通过
909898
CarlosLiu楼主2023/9/24 13:00

下面的代码提交测试点2和5都WA,显示输出第一行第一列为0。这是为什么呀???我没看出来有什么问题啊……求大佬帮助。

#include<bits/stdc++.h>
using namespace std;
int m,n,a[200009],b[200009],x[100009],y[100009][150];
int deg[100009],c[100009],q[100009],t;
int w[100009],z[100009][150];
int main() {
	cin>>n>>m;
	for(int i=1;i<=m;i++) {
		scanf("%d %d",&a[i],&b[i]);
		x[b[i]]++;
		y[b[i]][x[b[i]]]=a[i];
		w[a[i]]++;
		z[a[i]][w[a[i]]]=b[i];
		deg[b[i]]++;
	}
	for(int i=1;i<=n;i++) {
		if(deg[i]==0) {
			t++;
			q[t]=i;
	    }
	}
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=w[q[i]];j++) {
        	deg[z[q[i]][j]]--;
        	if(deg[z[q[i]][j]]==0) {
        		t++;
        		q[t]=z[q[i]][j];
			}
		} 
    }
	for(int i=1;i<=n;i++) {
		int T=0;
		for(int j=1;j<=x[q[i]];j++) {
			if(c[y[q[i]][j]]>T) T=c[y[q[i]][j]];
		}
		c[q[i]]=T+1;
	}
	for(int i=1;i<=n;i++) printf("%d\n",c[i]);
	return 0;
}
2023/9/24 13:00
加载中...