acwing-257. 关押罪犯(二分图+二分)「建议收藏」

acwing-257. 关押罪犯(二分图+二分)「建议收藏」S 城现有两座监狱,一共关押着 N 名罪犯,编号分别为 1∼N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为 c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 c 的冲突事件。每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到 S 城 Z 市长那里。公务繁忙的 Z 市长只会去看

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

S 城现有两座监狱,一共关押着 N 名罪犯,编号分别为 1∼N。

他们之间的关系自然也极不和谐。

很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。

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

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

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

公务繁忙的 Z 市长只会去看列表中的第一个事件的影响力,如果影响很坏,他就会考虑撤换警察局长。

在详细考察了 N 名罪犯间的矛盾关系后,警察局长觉得压力巨大。

他准备将罪犯们在两座监狱内重新分配,以求产生的冲突事件影响力都较小,从而保住自己的乌纱帽。

假设只要处于同一监狱内的某两个罪犯间有仇恨,那么他们一定会在每年的某个时候发生摩擦。

那么,应如何分配罪犯,才能使 Z 市长看到的那个冲突事件的影响力最小?这个最小值是多少?

输入格式
第一行为两个正整数 N 和 M,分别表示罪犯的数目以及存在仇恨的罪犯对数。

接下来的 M 行每行为三个正整数 aj,bj,cj,表示 aj 号和 bj 号罪犯之间存在仇恨,其怨气值为 cj。

数据保证 1≤aj<bj<N,0<cj≤109 且每对罪犯组合只出现一次。

输出格式
输出共 1 行,为 Z 市长看到的那个冲突事件的影响力。

如果本年内监狱中未发生任何冲突事件,请输出 0。

数据范围
N≤20000,M≤100000

输入样例:
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
输出样例:
3512

题解
二分图染色

#include<bits/stdc++.h>
using namespace std;
const int N = 2e4 + 10;
const int M = 2e5 + 10;
int vis[N],color[N];
struct Edge{ 
   
    int v,w,next;
}edge[M];
int head[N],cnt;
void add(int u,int v,int w){ 
   
    edge[cnt].v = v;
    edge[cnt].next = head[u];
    edge[cnt].w = w;
    head[u] = cnt ++;
}
int n,m;
bool draw(int u,int last,int mid){ 
   
    vis[u] = true;
    color[u] = last;
    for(int i = head[u];~i;i = edge[i].next){ 
   
        int v = edge[i].v,w = edge[i].w;
        if(w <= mid)continue;
        if(!vis[v]){ 
   
            if(!draw(v,last ^ 1,mid))return false;
        }
        else if(color[u] == color[v])return false;
    }
    return true;
}
bool check(int mid){ 
   
    memset(vis,0,sizeof vis);
    memset(color,0,sizeof color);
    for(int i = 1;i <= n;i ++){ 
   
        if(!vis[i]){ 
   
            if(!draw(i,0,mid))return false;
        }
    }
    return true;
}
int main(){ 
   
    cin>>n>>m;
    int x,y,w;
    memset(head,-1,sizeof head);
    for(int i = 0;i < m;i ++){ 
   
        cin>>x>>y>>w;
        add(x,y,w),add(y,x,w);
    }
    int l = 0,r = 1e9;
    while(l < r){ 
   
        int mid = (l + r) >> 1;
        if(check(mid))r = mid;
        else l = mid + 1;
    }
    cout<<l<<endl;
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168613.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月9日 下午1:16
下一篇 2022年8月9日 下午1:36


相关推荐

  • shell中调用vi编辑器和Here Documents

    shell中调用vi编辑器和Here Documents

    2021年8月26日
    79
  • 前端性能优化的几种方案

    前端性能优化的几种方案前端进行性能优化的方案很多 这里只列举部分 在实际应用中不要贪多 想着都用上 要对网站的主要用户群体进行针对性优化 1 降低请求量 合并资源 减少 http 请求数量 lazyLoad 如图片懒加载 分批加载 每次只加载一部分 使用字体图标或 CSS 绘制 来代替部分图片 2 加快请求速度 预解析 DNS 使用 HTTP2 0 并行加载 CDN 分发 webP 对图片进行压缩 减少图片体积 minify gzip 压缩

    2026年3月17日
    2
  • 无法连接到服务器。错误代码 0x80072EFD

    无法连接到服务器。错误代码 0x80072EFD我遇到的是 win 便笺无法同步信息 win 商店打不开也会报这个错误 这个错误代码 0x80072EFD 造成账号登录不上 无法同步等之类的问题 原因 就是 VPN 代理的锅 它自己使用自动配置脚本了 配置了 但没有用 狗狗还是打不开 PS 同样这个方法也可以解决 InternetExpl 无法打开网页 推荐 解决方法 打开 InternetExpl 小齿轮图标 Internet

    2026年3月26日
    2
  • 学生个人网页设计作品_简单的静态网页代码

    学生个人网页设计作品_简单的静态网页代码学生个人静态网页设计作品之我的家乡设计思路知识运用内容介绍页面代码展示作品展示设计思路页面使用居中效果,留下留白简洁简便,使浏览者在浏览的过程中有一种舒适感,在视觉方面有着清晰安静的画面,吸引浏览者对下面内容的浏览。作品采用的背景是白色,在视觉方面上有着明亮的空间,主体内容宽度为1080px,较大的宽度让浏览者能够清晰的浏览。知识运用在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识内容介绍《我的家

    2025年9月14日
    9
  • Effective STL笔记

    Effective STL笔记

    2021年6月20日
    117
  • Qt的下载安装全教程

    Qt的下载安装全教程Qt的安装及环境配置

    2022年5月17日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号