南洋工科大学のACMドールレース兼16は、メモリアル・トーナメントB PKが泡を吹いて引退しました

トピック出典:http://acm.nyist.edu.cn/problem/1662

件名の説明:

トレーニング、リラックスする準備ができてPKの一日を過ごした後は、芝生の上で泡を吹きました。PK操作の食事後、N気泡の空に現れ、各気泡が番号付けされています。M所定の関係、UVWで与えられるそれぞれの関係は、uが共にV、気泡の数であってもよい泡の数として表現され、コストは、Wに費やします。
この時点で、PKは、質問を考え:バブルのkユニコムブロックが空に表示されるように、これらn個のコストは一緒に気泡の一部に気泡を最小限に抑える方法?しかし、PKは、自分自身を救い出すことができない泡の海に浸し、彼はあなたが彼をアンサーバックしたい、この問題について考える必要はありません。

説明を入力します。

最初の三つの整数の列N、M及びK(1 <= K <= N <= 1000、1 <= M <= 500000)。これは、気泡の数、PK-相関分析と形成されるブロックの最終的な気泡ユニコムの数を表します。
3つの数字U、V、W(1 <次のmライン = U、V <= N、0 <= 1000000 <W)、 あなたが一緒にバブルをuとvの泡を置くことができること、それはワットにかかるコスト。

出力説明:

出力整数、nは最小コストKブロックユニコム気泡が空に見えるように、一緒に泡中の気泡のこの数を表します。

サンプル入力:
4 4 2
1 2 1
2 3 4
3 4 2
1 4 5
出力例:
3

互いに素なセット(クラスカルいじりとほぼそれらを係合
Nユニコム見ブロックの初期状態では、11個のブロックの両側に追加するユニコムユニコム、ユニコムは、ブロックの数(i)とみなさない-1。
行側行がでソート後のみKブロックユニコムまで、互いに素なセット関係ユニコムブロックで維持した。(K点を添加しない破るなく空の残りのときの判断を組み合わせたときに高速外であるk番目のリンク。(詳細コードを見て

参照コード:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
#define ll long long
const int N=1e6+5;
#define inf 0x3f3f3f3f
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
int pre[N],n,m,k,num;
struct node
{
   int u,v,w;
} mmp[500005];
bool cmp(node a,node b)
{
       return a.w<b.w;
}
void init()
{
   for(int i=1; i<=n; i++)
       pre[i]=i;
}
int Find(int x)
{
   return x==pre[x]?x:pre[x]=Find(pre[x]);
}
bool Join(int x,int y)
{
   int fx=Find(x),fy=Find(y);
   if(fx!=fy)
   {
       num--;
       pre[fy]=fx;
       return 1;
   }
   return 0;
}
int kruskal(){
   int sum=0;
   for(int i=0;i<m;i++) {
       if (Join(mmp[i].u, mmp[i].v)) {
           sum += mmp[i].w;
       }
       if (num==k)
           break;
   }
   return sum;
}
int main()
{
    //freopen("//home/nuoyanli//文档//0615//B//data//secret//3.in", "rep", stdin);
   cin>>n>>m>>k;
   num=n;
   init();
   for(int i=0; i<m; i++)
   {
       int a,b,c;
       cin>>a>>b>>c;
       mmp[i].u=a,mmp[i].v=b,mmp[i].w=c;
   }
   sort(mmp,mmp+m,cmp);
   cout<<kruskal()<<endl;
   return 0;
}
/**
4 4 2
1 2 1
2 3 4
3 4 2
1 4 5
3
4 3 2
1 2 1
2 3 2
3 4 1
2
5 3 2
1 2 1
2 3 2
3 4 1

**/

おすすめ

転載: blog.csdn.net/nuoyanli/article/details/92445259