关押罪犯

题目:

描述S 城现有两座监狱,一共关押着 NNN 名罪犯,编号分别为 111 ~ NNN。他们之间的关系自然也极不和谐。
很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。
我们用 “怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。
如果两名怨气值为 ccc 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 ccc 的冲突事件。每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到 S 城 Z 市长那里。
公务繁忙的 Z 市长只会去看列表中的第一个事件的影响力,如果影响很坏,他就会考虑撤换警察局长。在详细考察了 NNN 名罪犯间的矛盾关系后,警察局长觉得压力巨大。
他准备将罪犯们在两座监狱内重新分配,以求产生的冲突事件影响力都较小,从而保住自己的乌纱帽。
假设只要处于同一监狱内的某两个罪犯间有仇恨,那么他们一定会在每年的某个时候发生摩擦。那么,应如何分配罪犯,才能使 Z 市长看到的那个冲突事件的影响力最小?这个最小值是多少?输入输入第一行为两个正整数 N(1≤N≤20000) 和 MM(1≤M≤100000),分别表示罪犯的数目以及存在仇恨的罪犯对数。接下来的 MMM 行每行为三个正整数 a,b,c,表示 a 号和 b号罪犯之间存在仇恨,其怨气值为 c​。数据保证a,b≤N&0<c≤100000000且每对罪犯组合只出现一次。输出输出共一行,为 Z 市长看到的那个冲突事件的影响力。如果本年内监狱中未发生任何冲突事件,请输出 000。输入样例 14 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884输出样例 13512来源NOIP2010

这是一道特别经典的并查集的题,有很多种解题的方式,这里我就来讲讲用虚点来做的方式。

虚点

虚点,简单地说就是相反面(如水对火)这类的东西,那我们怎么在编程里面创建虚点呢?
在这里插入图片描述如上图,虚点就是:

int a[1010],n;
int x;
a[x]的虚点即为a[x+n];

思路

测试数据1:
在这里插入图片描述
很显然,这是一道二分图的题,但我们使用的是虚点,就不需要考虑这么多。

  • 所以,首先需要排序,这样我们才能使怒气值更加小。
  • 然后,如果罪犯x会和罪犯y冲突,那么就将x和y的虚点连起来,y和x的虚点连起来。
  • 最后,如果x和y都连接到了同一个点的虚点,那么就可以输出他们的怒气值了,因为我们已经对怒气值排过序了,排完更大的,现在冲突的就是剩下的中最大的,直接输出就行了,如果过完了这个循环还没有找到,说明能分配完,输出0就行了。

在这里插入图片描述
代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 400020;//2010*2
const int maxm = 1000010;
int n,m;struct node
{int u,v,w;
}g[maxm];bool cmp(node x,node y){return x.w>y.w;
}int fa[maxn];void init() 
{for(int i = 1; i <= 2*n; i++){fa[i] = i;}
}//初始化 int get(int x)
{if(fa[x] == x) return x;int r = get(fa[x]);fa[x] = r;return r;
}//找根节点 void merge(int x, int y)
{fa[get(x)]=get(y);
}//合并 int main()
{cin >> n >> m;init();for(int i = 1; i <= m; i++){cin >> g[i].u >> g[i].v>>g[i].w;}sort(g+1,g+m+1,cmp);	for (int i=1;i<=m;i++){if (get(g[i].u)!=get(g[i].v)){merge(g[i].u,g[i].v+n);merge(g[i].u+n,g[i].v);}else {cout<<g[i].w;return 0;}}cout<<0;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1619873.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

罪恶

&#xff0d;&#xff0d;&#xff0d;&#xff0d; 罪恶 还是属于闲得慌&#xff0c;瞎拍。也许您会帮我想个更棒的标题&#xff0c;或者干脆叫“无题”。 转载于:https://www.cnblogs.com/hzy5901/archive/2010/03/16/5871737.html

游戏开发学什么?四步修炼骨灰级高手

游戏开发学什么&#xff1f;四步修炼骨灰级高手 近日App Store公布了2013年年度最佳游戏奖项&#xff0c;复古风格的捕鱼游戏《奇葩钓鱼》荣获了iPhone平台上年度最佳游戏的殊荣&#xff0c;拥有独特视觉效果的横版冒险游戏《罪恶之地》夺得了iPad平台上年度最佳游戏的桂冠。…

代码随想录打卡—day42—【DP】— 8.27 01背包基础

1 01背包基础 背包概述&#xff1a; 1.1 01背包是什么 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 1.2 01背包二维数组 二维数组还…

3D飞镖游戏源码ios版

一款ios 3D飞镖游戏源码,通过物理引擎和重力感应来控制飞镖向目标物体击中&#xff01;游戏比较简单&#xff0c;可以学习一下3D游戏的基本开发. 源码下载&#xff1a; http://code.662p.com/view/6262.html 开发平台&#xff1a; 在xcode 4.3编译通过&#xff0c;iphone4&am…

PS飞镖靶的制作

首先我们在Ps中新建一个600像素*600像素的画布&#xff0c;设置分辨率300/200都可以。 步骤如下&#xff1a; 1.拉出两条参考线&#xff0c;一条垂直居中&#xff0c;一条水平居中。 2.用椭圆工具在两参考线中心点拉出一个圆形&#xff0c;设置颜色红色。用矩形选框工具裁剪掉3…

[SCOI2011]飞镖[数学模拟]

2335: [SCOI2011]飞镖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 482 Solved: 152[Submit][Status][Discuss] Description 飞镖是在欧洲颇为流行的一项运动。它的镖盘上分为20个扇形区域&#xff0c;分别标有1到20的分值&#xff0c;每个区域中有单倍、双倍和三倍的区…

【题解】[SCOI2011] 飞镖

模拟题 红靶子的我们先不考虑。 如果是 {1,2,2} &#xff0c; {2,2,3} 这种只涉及两种倍数的话&#xff0c;我们想到不定方程&#xff1a; axby c 的通解形式&#xff08;a,b,c 为常数&#xff09;&#xff0c;从而探讨 x,y 在规定取值内是否有解。 探讨 {1,2,3} 的情况。 …

搭载双筒飞镖?这款无人机太危险

折叠式的设计使之方便携带&#xff0c;堪称猎犬好搭档。 近日&#xff0c;基于SuperDrone无人机&#xff0c;南非Haevic公司改造了一款搭载飞镖枪的无人机——DartDrone&#xff0c;专为兽医及狩猎人员研发。 据悉&#xff0c;SuperDrone是一款采用可折叠结构的六翼无人机&…

BZOJ2335: [SCOI2011]飞镖

Description 飞镖是在欧洲颇为流行的一项运动。它的镖盘上分为20个扇形区域&#xff0c;分别标有1到20的分值&#xff0c;每个区域中有单倍、双倍和三倍的区域&#xff0c;打中对应的区域会得到分值乘以倍数所对应的分数。例如打中18分里面的三倍区域&#xff0c;就会得到54分。…

飞镖(bzoj 2335)

Description 飞镖是在欧洲颇为流行的一项运动。它的镖盘上分为20个扇形区域&#xff0c;分别标有1到20的分值&#xff0c;每个区域中有单倍、双倍和三倍的区域&#xff0c;打中对应的区域会得到分值乘以倍数所对应的分数。例如打中18分里面的三倍区域&#xff0c;就会得到54分。…

飞镖和招聘

4月16日 公司里面玩飞镖的同事越来越多了&#xff0c;不少人都得了飞镖综合症&#xff08;手酸、腰酸、对休息时间非常敏感&#xff09;。除了飞镖游戏本身的吸引力&#xff0c;我还发现它有很多和我们从事猎头 招聘非常相似的特征&#xff1a; Know how to close the game. 懂…

java设计飞镖游戏_3分钟手把手带你使用Unity制作“扔飞镖游戏”

原标题&#xff1a;3分钟手把手带你使用Unity制作“扔飞镖游戏” 日落西山红霞飞~战士打靶把营归呀巴扎嘿。今天我制作一个简单的打靶游戏(扔飞镖) 在制作之前首先要思考这个游戏需要什么对象&#xff0c;很简单&#xff0c;一只飞镖、一个靶。 这里我把飞镖设置成了刚体&#…

Leetcode——1453. 圆形靶内的最大飞镖数量

墙壁上挂着一个圆形的飞镖靶。现在请你蒙着眼睛向靶上投掷飞镖。 投掷到墙上的飞镖用二维平面上的点坐标数组表示。飞镖靶的半径为 r 。 请返回能够落在 任意 半径为 r 的圆形靶内或靶上的最大飞镖数。 示例 1&#xff1a; 输入&#xff1a;points [[-2,0],[2,0],[0,2],[0,-…

打印飞镖图形

打印如图下非标 代码如下 #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6031) #include<stdio.h> #include<string.h> int main() {int n 0;while (scanf("%d", &n) 1){//上n行int i 0;for (i 0; i < n; i){int j 0;for (j 0…

【数据结构与算法】之深入解析“圆形靶内的最大飞镖数量”的求解思路与算法示例

一、题目要求 墙壁上挂着一个圆形的飞镖靶,现在请你蒙着眼睛向靶上投掷飞镖。投掷到墙上的飞镖用二维平面上的点坐标数组表示,飞镖靶的半径为 r,请返回能够落在任意半径为 r 的圆形靶内或靶上的最大飞镖数。示例 1:输入:points = [[-2,0],[2,0],[

【题解】飞镖

题目描述 小明喜欢玩飞镖游戏&#xff0c;他会把每次的得分都记录在数组中。今天有个飞镖大奖&#xff0c;得奖的规则是&#xff1a;如果你4次飞镖的得分先后是&#xff08;a&#xff0c;b&#xff0c;c&#xff0c;d&#xff09;&#xff0c;满足abcd。 小明准备把记录里的其他…

OpenCV技巧篇——多目标视觉定位(以飞镖定位为例)

OpenCV技巧篇【1】——多目标视觉定位&#xff08;以飞镖定位为例&#xff09; 1、针对问题 多目标视觉定位是指通过计算机视觉技术对一张图片中的多个目标进行识别和定位的过程。本篇将以对飞镖定位为例&#xff0c;提出一个简单有效的多目标定位技巧&#xff0c;最终实现如…

LeetCode 1453. 圆形靶内的最大飞镖数量(几何题)

1. 题目 墙壁上挂着一个圆形的飞镖靶。现在请你蒙着眼睛向靶上投掷飞镖。 投掷到墙上的飞镖用二维平面上的点坐标数组表示。飞镖靶的半径为 r 。 请返回能够落在 任意 半径为 r 的圆形靶内或靶上的最大飞镖数。 示例 1&#xff1a; 输入&#xff1a;points [[-2,0],[2,0…

一个飞镖模型

#飞镖 #一个角 from turtle import* def angle():pu()goto(0,0)pendown()pencolor("black")left(45)fd(50)left(68)fd(91.73)left(157)fd(120)begin_fill()fillcolor("black")right(135)fd(50)right(68)fd(91.73)right(157)fd(120)end_fill()#飞镖复杂化 d…

扔飞镖游戏

日落西山红霞飞~战士打靶把营归呀巴扎嘿。今天我制作一个简单的打靶游戏&#xff08;扔飞镖&#xff09; 在制作之前首先要思考这个游戏需要什么对象&#xff0c;很简单&#xff0c;一只飞镖、一个靶。 这里我把飞镖设置成了刚体&#xff0c;什么是刚体&#xff1f;简而言之&…