Hdu6081 度度熊的王国战略

xiaoxiao2021-02-28  89

度度熊的王国战略

Time Limit: 40000/20000 MS (Java/Others)    Memory Limit: 32768/132768 K (Java/Others) Total Submission(s): 70    Accepted Submission(s): 15 Problem Description 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族。 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士。 所以这一场战争,将会十分艰难。 为了更好的进攻哗啦啦族,度度熊决定首先应该从内部瓦解哗啦啦族。 第一步就是应该使得哗啦啦族内部不能同心齐力,需要内部有间隙。 哗啦啦族一共有n个将领,他们一共有m个强关系,摧毁每一个强关系都需要一定的代价。 现在度度熊命令你需要摧毁一些强关系,使得内部的将领,不能通过这些强关系,连成一个完整的连通块,以保证战争的顺利进行。 请问最少应该付出多少的代价。   Input 本题包含若干组测试数据。 第一行两个整数n,m,表示有n个将领,m个关系。 接下来m行,每行三个整数u,v,w。表示u将领和v将领之间存在一个强关系,摧毁这个强关系需要代价w 数据范围:  2<=n<=3000 1<=m<=100000 1<=u,v<=n 1<=w<=1000   Output 对于每组测试数据,输出最小需要的代价。   Sample Input 2 1 1 2 1 3 3 1 2 5 1 2 4 2 3 3   Sample Output 1 3   Source 2017"百度之星"程序设计大赛 - 资格赛 ————————————————————————————————— 比赛的时候以为是最小割,结果就是分离出一个点最小花费,题意真的讲不清,还是我原本是对的,数据水了,于是并查集搞定 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <string> #include <math.h> #include <time.h> #include <algorithm> #include <complex> #include <vector> #include <stack> #include <queue> #include <map> #include <set> using namespace std; #define inf 0x3f3f3f3f #define llinf 0x3f3f3f3f3f3f3f3f #define _pi acos(-1.0) #define _EPS 1e-8 #define LL long long int pre[30003]; int cnt[30003]; void init() { for(int i=0;i<3002;i++) pre[i]=i; } int fin(int x) { return x==pre[x]?x:pre[x]=fin(pre[x]); } int main() { int n,m,u,v,c; while(~scanf("%d%d",&n,&m)) { init(); memset(cnt,0,sizeof cnt); for(int i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&c); if(u==v) continue; int a=fin(u),b=fin(v); if(a!=b) pre[a]=b; cnt[u]+=c; cnt[v]+=c; } int ans=inf; int flag=0; for(int i=1;i<=n;i++) { if(pre[i]==i) flag++; ans=min(ans,cnt[i]); } printf("%d\n",flag==1?ans:0); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-77578.html

最新回复(0)