随笔 - 531  文章 - 0  评论 - 3  阅读 - 10215 

我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,

如果两名怨气值为 cc 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 cc 的冲突事件。

每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报市长那里。 

市长只会去看列表中的第一个事件的影响力,

他准备将罪犯们在两座监狱内重新分配,以求产生的冲突事件影响力都较小, 问这个最小值?

 

 扩展域并查集

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <algorithm>
using namespace std ;
 const int N=1e5+6;
  
 struct T{
    int x,y,z;
 }A[N];
 int fa[N],m;
 int n;
  
 int find(int x){
    return x==fa[x]?x:fa[x]=find(fa[x]);
 }
 void cmb(int x,int y){
    int fx=find(x),fy=find(y);
    fa[fy]= fx;
 
 int cmp(T &x,T &y){
    return x.z>y.z;
 }
 signed main(){
    cin>>n>>m;
    int i;
    for(i=1;i<=n;i++) fa[i]= i,fa[i+n]=i+n;
    for(i=1;i<=m;i++){cin>>A[i].x>>A[i].y>>A[i].z;}
    sort(A+1,A+1+m,cmp);
     
    for(i=1;i<=m;i++){
        int fx = find(A[i].x) ,fy=find(A[i].y);
         
        if(fx==fy) { cout<<A[i].z<<endl; return 0;}
         
        cmb(A[i].x+n,A[i].y);
        cmb(A[i].y+n,A[i].x);
    }
    cout<<0<<endl;
 }

 

posted on   towboat  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示