P1525 关押罪犯
題目描述
SS?城現有兩座監獄,一共關押著?NN?名罪犯,編號分別為?1-N1?N?。他們之間的關系自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發沖突。我們用“怨氣值”(一個正整數值)來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為?cc?的罪犯被關押在同一監獄,他們倆之間會發生摩擦,并造成影響力為?cc?的沖突事件。
每年年末,警察局會將本年內監獄中的所有沖突事件按影響力從大到小排成一個列表,然后上報到S 城Z 市長那里。公務繁忙的Z 市長只會去看列表中的第一個事件的影響力,如果影響很壞,他就會考慮撤換警察局長。
在詳細考察了?NN?名罪犯間的矛盾關系后,警察局長覺得壓力巨大。他準備將罪犯們在兩座監獄內重新分配,以求產生的沖突事件影響力都較小,從而保住自己的烏紗帽。假設只要處于同一監獄內的某兩個罪犯間有仇恨,那么他們一定會在每年的某個時候發生摩擦。
那么,應如何分配罪犯,才能使Z 市長看到的那個沖突事件的影響力最小?這個最小值是多少?
輸入輸出格式
輸入格式:
?
每行中兩個數之間用一個空格隔開。第一行為兩個正整數?N,MN,M?,分別表示罪犯的數目以及存在仇恨的罪犯對數。接下來的?MM?行每行為三個正整數?a_j,b_j,c_jaj?,bj?,cj??,表示?a_jaj??號和?b_jbj??號罪犯之間存在仇恨,其怨氣值為?c_jcj??。數據保證?1<aj≤bj≤N ,0 < cj≤ 1,000,000,0001<aj≤bj≤N,0<cj≤1,000,000,000?,且每對罪犯組合只出現一次。
?
輸出格式:
?
共?11?行,為?ZZ?市長看到的那個沖突事件的影響力。如果本年內監獄中未發生任何沖突事件,請輸出?00?。
?
輸入輸出樣例
輸入樣例#1:?4 6 1 4 2534 2 3 3512 1 2 28351 1 3 6618 2 4 1805 3 4 12884 輸出樣例#1:?
3512
說明
【輸入輸出樣例說明】罪犯之間的怨氣值如下面左圖所示,右圖所示為罪犯的分配方法,市長看到的沖突事件影響力是?35123512?(由?22?號和?33?號罪犯引發)。其他任何分法都不會比這個分法更優。
【數據范圍】
對于?30\%30%?的數據有?N≤ 15N≤15?。
對于?70\%70%?的數據有?N≤ 2000,M≤ 50000N≤2000,M≤50000?。
對于?100\%100%?的數據有?N≤ 20000,M≤ 100000N≤20000,M≤100000?。
?
Solution:
水題,直接貪心+并查集(當然也可以二分答案+二分圖染色判定)。
貪心的想到,我們盡可能的將沖突值大的兩者放到不同的監獄里,先將沖突值從大到小排序,由于敵人的敵人就是我的朋友,于是每次就并查集合并一下同類的關系,當某次出現沖突時,當前的沖突值就是最少的。
代碼:
?
#include<bits/stdc++.h> #define il inline #define ll long long #define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++) #define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--) using namespace std; const int N=200005; int n,m,fa[N]; struct node{int to,fr,v;bool operator < (const node a) const {return v>a.v;} }e[N];il int gi(){int a=0;char x=getchar();bool f=0;while((x<'0'||x>'9')&&x!='-')x=getchar();if(x=='-')x=getchar(),f=1;while(x>='0'&&x<='9')a=(a<<3)+(a<<1)+x-48,x=getchar();return f?-a:a; }il int find(int x){return fa[x]==x?fa[x]:fa[x]=find(fa[x]);}int main(){n=gi(),m=gi();For(i,1,n<<1|1) fa[i]=i;For(i,1,m) e[i].fr=gi()+1,e[i].to=gi()+1,e[i].v=gi();sort(e+1,e+m+1);int fx,fy;For(i,1,m) {fx=find(fa[e[i].fr]),fy=find(fa[e[i].to]);if(fx==fy) cout<<e[i].v,exit(0);if(fx!=fy) {fa[find(fx+n)]=fy;fa[find(fy+n)]=fx;}}cout<<0;return 0; }?
轉載于:https://www.cnblogs.com/five20/p/9304783.html
總結
以上是生活随笔為你收集整理的P1525 关押罪犯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Host is not allowed
- 下一篇: Kali Day01 --- arps