刷題——poj 2377 Bad Cowtractors
阿新 • • 發佈:2019-01-08
/*
在n個倉庫間建立網路從1到n,a倉庫跟b倉庫的花費為c
應為倉庫主比較摳門,所以承包業務的人要令倉庫主的花費最大
同時不能形成環,若無法建立網路則輸出-1否則輸出最大費用
最小生成樹改成最大生成樹做
*/
#include <stdio.h>
#include <algorithm>
using namespace std;
struct GR
{
int u,v,w;
};
GR G[21000];
int n,m,rt[1100];
bool cmp(GR a,GR b)
{
return a.w>b.w;
}
void init()
{
for(int i=1;i<=n;i++)
{
rt[i]=i;
}
}
int find(int x)
{
if(x!=rt[x])
{
rt[x]=find(rt[x]);
}
return rt[x];
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
init();
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&G[i].u,&G[i].v,&G[i].w);
}
sort(G,G+m,cmp);
int sum=0,l=1;
for(int i=0;i<m;i++)
{
int a=find(G[i].u);
int b=find(G[i].v);
if(a!=b)
{
sum+=G[i].w;
rt[a]=b;
l++;
}
}
if(l!=n)
{
sum=-1;
}
printf("%d\n",sum);
}
return 0;
}
在n個倉庫間建立網路從1到n,a倉庫跟b倉庫的花費為c
應為倉庫主比較摳門,所以承包業務的人要令倉庫主的花費最大
同時不能形成環,若無法建立網路則輸出-1否則輸出最大費用
最小生成樹改成最大生成樹做
*/
#include <stdio.h>
#include <algorithm>
using namespace std;
struct GR
{
int u,v,w;
};
GR G[21000];
int n,m,rt[1100];
bool cmp(GR a,GR b)
{
return a.w>b.w;
}
void init()
{
for(int i=1;i<=n;i++)
{
rt[i]=i;
}
}
int find(int x)
{
if(x!=rt[x])
{
rt[x]=find(rt[x]);
}
return rt[x];
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
init();
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&G[i].u,&G[i].v,&G[i].w);
}
sort(G,G+m,cmp);
int sum=0,l=1;
for(int i=0;i<m;i++)
{
int a=find(G[i].u);
int b=find(G[i].v);
if(a!=b)
{
sum+=G[i].w;
rt[a]=b;
l++;
}
}
if(l!=n)
{
sum=-1;
}
printf("%d\n",sum);
}
return 0;
}