洛谷P1525 关押罪犯
? 解题记录 ? ? 洛谷 ? ? 并查集 ?    2017-07-25 17:24:39    479    0    0

题目描述

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≤ 1,000,000,000,且每对罪犯组合只出现一次。

 

输出格式:

 

共1 行,为Z 市长看到的那个冲突事件的影响力。如果本年内监狱中未发生任何冲突事件,请输出0。

 

输入输出样例

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

说明

【输入输出样例说明】罪犯之间的怨气值如下面左图所示,右图所示为罪犯的分配方法,市长看到的冲突事件影响力是3512(由2 号和3 号罪犯引发)。其他任何分法都不会比这个分法更优。

【数据范围】对于30%的数据有N≤ 15。对于70%的数据有N≤ 2000,M≤ 50000。对于100%的数据有N≤ 20000,M≤ 100000。

        类似团伙的思想,这道题可以用并查集。将一个点分成两个点。在合并的时候

        对于每一组关系A--W--B把A的敌人与B,B的敌人与A合并。先对关系按怒气值

        排序。从大到小贪心并且用并查集维护,矛盾时(一组关系A,B同一集合)即可。

        同样,此题也可以用二分答案做,链接:

        下面贴一段小小的代码(题目数据有坑,开成200000个点才能过):

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e5+100;

struct edge{
	int u,v,w;
	bool operator <(const edge &a)const
		{return w>a.w;}
}e[maxn];

namespace DSU{
	int fa[maxn*2],sum[maxn*2];
	void init(int n){for(int i=1;i<=n;i++)	fa[i]=i,sum[i]=1;}
	int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
	void combine(int a,int b){fa[find(a)]=find(b);}
}

int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
		scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
	DSU::init(2*n);
	sort(e+1,e+m+1);
	int mx=0;
	for(int i=1;i<=m;i++){
		int u=e[i].u;
		int v=e[i].v;
		if(DSU::find(u)==DSU::find(v))
			{mx=e[i].w;break;}
		DSU::combine(u,v+n);
		DSU::combine(v,u+n);
	}
	printf("%d\n",mx);
	return 0;
}


上一篇: 洛谷 P3690 【模板】Link Cut Tree

下一篇: 洛谷P1018 乘积最大

479 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航