博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1525关押罪犯——并查集
阅读量:5153 次
发布时间:2019-06-13

本文共 883 字,大约阅读时间需要 2 分钟。

题目:

并查集+贪心,从大到小排序,将二人分在不同房间,找到第一个不满足的即为答案。

代码如下:

#include
#include
#include
using namespace std;int n,m,fa[20005],ans,ct,d[20005];struct N{ int hd,to,w;}edge[100005];bool cmp(N x,N y){ return x.w>y.w;}int find(int x){ if(fa[x]==x)return x; else { int root=find(fa[x]); d[x]+=d[fa[x]]; fa[x]=root; } return fa[x];}int main(){ scanf("%d%d",&n,&m); int a,b,c; for(int i=1;i<=m;i++) { ct++; scanf("%d%d%d",&edge[ct].hd,&edge[ct].to,&edge[ct].w); } sort(edge+1,edge+m+1,cmp); for(int i=1;i<=n;i++)fa[i]=i; for(int i=1;i<=m;i++) { int u=find(edge[i].hd); int v=find(edge[i].to); if(u==v&&(d[edge[i].to]-d[edge[i].hd])%2==0)//在同间 { ans=edge[i].w; break; } if(u!=v) { fa[u]=v; d[u]=d[edge[i].to]-d[edge[i].hd]+1;//dhd+du=dto+1; } } printf("%d",ans); return 0;}

  

转载于:https://www.cnblogs.com/Zinn/p/8439980.html

你可能感兴趣的文章
C# 事务之SqlTransaction
查看>>
简单工厂模式
查看>>
linux简单设置samba,提供windows共享
查看>>
POJ 1609 Tiling Up Blocks
查看>>
xshell6,xftp下载
查看>>
传统API
查看>>
JDBC (转)
查看>>
Entity Framework Code First -- 延迟加载和预先加载
查看>>
linux单个进程的句柄数量
查看>>
jQuery 学习笔记 事件系列
查看>>
Number of Boomerangs
查看>>
深入理解计算机系统—异常
查看>>
1. Two Sum
查看>>
boost的字符串处理函数——format
查看>>
使用CefSharp在.Net程序中嵌入Chrome浏览器(五)——Javascript交互
查看>>
进程间的通信方式
查看>>
25、DataReaderWriter
查看>>
document.cookie的使用
查看>>
.NET运行时中的监测和可观测性
查看>>
《Hadoop基础教程》之初识Hadoop(转载)
查看>>