1. 程式人生 > >COGS 1215. [Tyvj Aug11] 冗余電網

COGS 1215. [Tyvj Aug11] 冗余電網

不能 接下來 tdi argc tar har return 數據 http

★ 輸入文件:ugrid.in 輸出文件:ugrid.out 簡單對比
時間限制:1 s 內存限制:128 MB

TYVJ八月月賽提高組第2題



測試點數目:5

測試點分值:20

--內存限制:128M

--時間限制:1s

【題目描述】

北冰洋有一座孤島,多年來一直沒電。近日,令島民們振奮的消息傳來:S國的專家要為他們修建電網!!!
孤 島上共有N個村莊,發電站要建在第K個村莊中。S國的專家要在N個村莊間修建M條輸電線路,但由於地理原因,M條線路無法保證每個村莊都與第K個村莊(建 有發電站)直接相連,同樣,也不一定能保證每個村莊都與第K個村莊間接相連(假設A與B直接相連,B與C直接相連,那麽A與C間接相連)。
然而,由於S國的專家智商實在太“高”了,以至於設計出了許多冗余線路。現給出第i條線路兩個端點Ui,Vi(分別表示線路連接的兩個村莊,Ui!=Vi)和長度Li,請你幫島民算一下:如果電網可以覆蓋全島,最少需要多長的電線;若不能,有多少個村莊無電可用。
註意:0<=冗余線路數目<m;部分數據有重邊。電網可雙向導電。

【輸入格式】

第一行:N M K
接下來M行:Ui Vi Li
具體含義見題目描述

【輸出格式】

如果電網可以覆蓋全島,輸出最少需要的電線長度;
若不能,輸出無電可用的村莊的個數。

【樣例輸入】

【樣例1】
5 5 1
1 2 1
2 3 1
3 4 1
4 5 1
5 1 1

【樣例2】
5 5 1
1 2 1
1 2 2
1 2 3
3 4 1
5 4 2

【樣例輸出】

【樣例1】
4

【樣例2】
3

【提示】

樣例解釋:
對於樣例一,電網可以覆蓋全島,最短長度為4;
對於樣例二,電網無法覆蓋3,4,5這3個村莊。

數據範圍:
對於20%的數據,有1<m,n<=10;
對於60%的數據,有1<m,n<=1000;
對於100%的數據,有1<m,n<=200000,0<li<=1e+7;
對於40%的數據,電網無法覆蓋全島。

【來源】

From tbcaaa8 http://www.tyvj.cn/Problem_Show.aspx?id=1591

kruskal

(rank1 蛤蛤)

屠龍寶刀點擊就送

#include <algorithm>
#include <cstdio>
#define N 200005
using namespace std;
struct Edge
{
    int x,y,z;
    bool operator<(Edge a)const
    {
        return z<a.z;
    }
}e[N];
int n,m,k,cnt,fa[N];
int find_(int x) {return fa[x]==x?x:fa[x]=find_(fa[x]);}
int Main()
{
    freopen("ugrid.in","r",stdin);
    freopen("ugrid.out","w",stdout);
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=n;++i) fa[i]=i;
    for(int x,y,z;m--;)
    {
        scanf("%d%d%d",&x,&y,&z);
        e[++cnt]=(Edge){x,y,z}; 
    }
    sort(e+1,e+1+cnt);
    int num=0;
    long long sum=0;
    for(int i=1;i<=cnt;++i)
    {
        int fx=find_(e[i].x),fy=find_(e[i].y);
        if(fx==fy) continue;
        fa[fy]=fx;
        num++;
        sum+=(long long)e[i].z;
        if(num==n-1) break;
    }
    num=0,k=find_(k);
    for(int i=1;i<=n;++i) if(find_(i)!=k) num++;
    if(num) printf("%d\n",num);
    else printf("%lld\n",sum);
    return 0;
}
int sb=Main();
int main(int argc,char *argv[]){;}

COGS 1215. [Tyvj Aug11] 冗余電網