社区讨论
c++递归式的一个bug?
P1525[NOIP 2010 提高组] 关押罪犯参与者 4已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mi6hj5nd
- 此快照首次捕获于
- 2025/11/20 04:58 4 个月前
- 此快照最后确认于
- 2025/11/20 04:58 4 个月前
第一个是我过的代码
CPP#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int zf[20001];bool tr,en[20001],vis[20001];//enemy==1 friend==0
struct u{
int a,b,c;
} f[100000];
bool cmp (u a,u b) {
return a.c>b.c;
}
int find(int x) {
if(zf[x]==x)return x;
int tp = find(zf[x]);
en[x]^=tr;
tr=en[x];
return zf[x]=tp;
}
int find2(int x) {
tr=0;
return find(x);
}
int main() {
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) zf[i]=i;
for(int i=0;i<m;i++) {
scanf("%d%d%d",&f[i].a,&f[i].b,&f[i].c);
}
sort(f+0,f+m,cmp);//
for(int i=0;i<m;i++) {
int x=find2(f[i].a),y=find2(f[i].b),enemy=en[f[i].a]^en[f[i].b];
if(x!=y) {
zf[x]=y;
if(!enemy)en[x]=1;
}
else {
if(vis[f[i].a] && vis[f[i].b] && !enemy) {
printf("%d\n",f[i].c);
return 0;
}
}
vis[x]=1;vis[y]=1;
/*/
CPP for(int ii=1;ii<=n;ii++) {
cout<<ii<<" : "<<en[ii]<<"with"<<zf[ii]<<endl;
}
cout<<endl;
/*/
CPP }
printf("0\n");
return 0;
}
其中find函数中用到了
en[x]^=tr;
而只要将该句写成
CPP if(tr) en[x]!=en[x];
编译器就毫不留情的把该句跳过了,求大神告诉我这是怎么回事。。。
回复
共 7 条回复,欢迎继续交流。
正在加载回复...