这题我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;
}