hust暑假集训2015 0713B Road System

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82557#problem/B

 

WA了8次你敢信。。。

觉得就是个最小生成树啊...

如果不能构成一颗树,那么就not sure。。。

需要注意n和m是反的。

然后就是WA...

WA到怀疑人生。。。

被学长查代码才发现....

原来当边数为0,我认为没有边数肯定是不连通的,所以都输出了Not sure。。。

但是!

如果只有一个点...即使不需要边,它本身就是联通的.....

离散不好好听课的后果。。

 

 

/*************************************************************************
    > File Name: code/2015summer/0713B.cpp
    > Author: 111qqz
    > Email: rkz2013@126.com
    > Created Time: 2015年07月13日 星期一 14时14分27秒
 ************************************************************************/

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
#define REP(i, n) for (int i=0;i<int(n);++i)
typedef long long LL;
typedef unsigned long long ULL;
const int N=1E4+5;
int T,n,m;
int f[N];
struct node
{
    int a,b,c;
}r[N];
bool cmp(node x,node y)
{
    if (x.c<y.c) return true;
    return false;
}
void init()
{
    for ( int i = 0 ; i < N ; i++)
      {
        f[i]=i;
        r[i].a=0;
        r[i].b=0;
        r[i].c=9999999;
      }
}
int root(int x)
{
    if (x==f[x]) return x;
    else return f[x]=root(f[x]);
}
int main()
{
    cin>>T;
    while (T--)
    {
        init();
        scanf("%d%d",&n,&m);
        for ( int i = 1 ; i <= n ; i++)
        {
          scanf("%d%d%d",&r[i].a,&r[i].b,&r[i].c);
        }
        sort(r+1,r+n+1,cmp);
        LL ans = 0;
        int cnt =0;
        bool flag=false;
        for (int i = 1 ; i <= n ; i++)
        {
          int x=root(r[i].a);
          int y=root(r[i].b);
          if (x!=y)
          {
            cnt++;
            ans = ans + r[i].c;
            f[x]=y;
          }
          if (cnt==m-1)
          {
            flag=true;
            break;
          }
        }
        if (flag)
        {
          cout<<ans<<endl;
        }
        else
        {
          if (m!=1)
          cout<<"I'm not sure."<<endl;
          else cout<<0<<endl;
        }
    }
    return 0;
}

 

posted @ 2015-07-13 15:41  111qqz  阅读(169)  评论(0编辑  收藏  举报