ZBSAMZL @ 2024-08-11 21:25:06
这题我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;
}
by 禹天钧2016 @ 2024-08-11 21:58:14
厌氧导致的 @ZBSAMZL
by ZBSAMZL @ 2024-08-11 22:16:33
@禹天钧2016 “厌氧”是什么意思啊?抱歉
by 禹天钧2016 @ 2024-08-11 22:18:02
讨厌氧气 @ZBSAMZL
by ZBSAMZL @ 2024-08-11 22:20:22
@禹天钧2016 啊???
by 禹天钧2016 @ 2024-08-12 09:39:03
@ZBSAMZL 洛谷开O2和不开O2的主要区别在于 编译优化级别:在洛谷等在线编程平台上,开启O2优化意味着编译器会进行更高级别的优化,这通常包括但不限于算法优化、减少不必要的计算等,以提高程序的运行效率。O2优化能够显著提升编译效率,从而减少程序的运行时间,达到优化的效果。 程序运行效率:开启O2优化后,程序可能会因为编译器的优化而运行得更快。然而,这也可能导致一些潜在的问题,比如访问未初始化的空间,这属于未定义的行为,可能会导致程序出错。这是因为O2优化可能会改变程序中某些未初始化的变量的值,从而导致程序的行为与预期不符。此外,开启O2优化还可能影响程序的某些特定行为,比如在某些数据结构实现上,不开O2时可能表现较慢,而开启O2后则可能表现得更快。 总的来说,开启O2优化可以显著提升编译效率,但也可能因为优化导致的变量值变化或其他潜在问题而导致程序行为发生变化。
by 禹天钧2016 @ 2024-08-12 09:39:57
我昨天跟你讲的厌氧是开玩笑的
by ZBSAMZL @ 2024-08-12 10:18:16
@禹天钧2016 thx