社区讨论
救救孩子吧 必关
P1525[NOIP 2010 提高组] 关押罪犯参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mix95ssw
- 此快照首次捕获于
- 2025/12/08 22:34 3 个月前
- 此快照最后确认于
- 2025/12/11 21:00 3 个月前
一个比较新奇的做法。
通过异或和记录每个点的染色,判断是否同色。
60pts,WA on #2、#4、#9、#10。
CPP通过异或和记录每个点的染色,判断是否同色。
60pts,WA on #2、#4、#9、#10。
#include<bits/stdc++.h>
using namespace std;
struct node{
int a,b,c;
}p[100010];
bool cmp(const node&x,const node&y)
{
return x.c>y.c;
}
int fa[20010],siz[20010];
bool w[20010];
void find(int u)
{
if(fa[u]!=u)
{
find(fa[u]);
fa[u]=fa[fa[u]];
w[u]^=w[fa[u]];
}
}
bool unite(int u,int v)
{
find(u);
find(v);
int f=fa[u],g=fa[v];
if(f==g)
{
if(w[u]==w[v])return 0;
return 1;
}
else
{
if(siz[f]<siz[g])swap(f,g);
fa[g]=f;
w[f]=w[u]^w[v];
siz[f]+=siz[g];
return 1;
}
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>p[i].a>>p[i].b>>p[i].c;
sort(p+1,p+m+1,cmp);
for(int i=1;i<=n;i++)
{
fa[i]=i;
siz[i]=1;
w[i]=0;
}
for(int i=1;i<=m;i++)
{
if(!unite(p[i].a,p[i].b))
{
cout<<p[i].c;
return 0;
}
}
cout<<0;
return 0;
}
求调,玄关。
回复
共 1 条回复,欢迎继续交流。
正在加载回复...