求助,什么原因会导致自测是对的,提交上去就错了?
查看原帖
求助,什么原因会导致自测是对的,提交上去就错了?
932251
ZBSAMZL楼主2024/8/11 21:25

这题我WA在#7#8,然后我下载了#7的测试数据,我的输出与正确答案均为994。所以为什么会出错呢?后面我又发现我的代码如果开了O2输出会变成503,关掉O2再次提交仍然WA在#7#8。这到底是怎么回事?

代码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int N=1e3+5;
vector<int>e[2*N];
queue<int>q;
int n,m,d[N],b[N][N],ans,in[2*N];
int main(){
	cin>>n>>m;
	int tmp=n;
	for(int i=1,s;i<=m;i++){
		cin>>s;
		tmp++;
		int mxa=0;
		int mna=1e5;
		for(int j=1,a;j<=s;j++){
			cin>>a;
			mxa=max(a,mxa);
			mna=min(a,mna);
			b[i][a]++;
		}
		for(int j=mna;j<=mxa;j++){
			
			if(b[i][j]==0){
				e[tmp].push_back(j);
				in[j]++;
			}
			else{
				e[j].push_back(tmp);
				in[tmp]++;
			}
		}
	}
	int cnt=1;
	ans=1;
	for(int i=1;i<=n;i++){
		if(!in[i]){
			q.push(i);
			d[cnt]++;
		}
	}
    int lst=0;
	while(!q.empty()){
		int x=q.front();
		q.pop();
		if(d[cnt]==0){
			if(d[cnt+1]==0)break;
			if(lst>n)ans++;
			cnt++;
		}
        d[cnt]--;
		for(int i=0;i<e[x].size();i++){
			in[e[x][i]]--;
			if(in[e[x][i]]==0){
				d[cnt+1]++;
				q.push(e[x][i]);
			}
		}
        lst=x;
	}
    cout<<ans<<endl;
	return 0;
}
2024/8/11 21:25
加载中...