tyvj1391(Kruskal)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tyvj1391(Kruskal)相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/space' title='space'>space   閫氳繃   mit   using   鍒嗗壊   cstring   oar   code   --   

4925: 璧板粖娉兼按鑺?/h2> Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 11  Solved: 11
[Submit][Status][Web Board]

Description

 璇濊锛屼腑涓甫棰嗙殑OIER浠墦绠椾妇琛屼竴娆″啲瀛f臣姘磋妭锛屽綋鐒惰繖鏄绉樺瘑杩涜鐨勶紝缁濆涓嶅彲浠ヨ涓腑鐭ラ亾銆備笉杩囦腑涓彲鏄€佹睙婀栦簡锛屽綋鐒跺緢蹇氨鍙戠幇浜嗘垜浠殑灏忛槾璋嬶紝浜庢槸浠栧噯澶囧ソ姘存灙杩笉鍙婂緟鐨勬兂瑕佸姞鍏ユ垜浠簡銆?nbsp;鎴戜滑涓€鍏辨湁N涓狾IER鎵撶畻鍙傚姞杩欎釜娉兼按鑺傦紝鍚屾椂寰堝噾宸х殑鏄濂芥湁N涓按榫欏ご(鑷充簬涓轰粈涔堬紝鎴戜笉瑙i噴)銆侼涓按榫欏ご涔嬮棿姝eソ鏈塏-1鏉″皬閬擄紝骞朵笖姣忎釜姘撮緳澶撮兘鍙互缁忚繃灏忛亾鍒拌揪鍏朵粬姘撮緳澶?杩欐槸涓€妫垫爲锛屼綘搴旇鎳傜殑..)銆備絾鏄疧IER闂ㄤ负浜嗚繋鎺ヤ腑涓殑鎸戞垬锛屽喅瀹氫慨寤轰竴浜涗釜閬撹矾(鑷充簬鎬庝箞淇紝绉樺瘑~),浣垮緱姣忎釜姘撮緳澶村埌姣忎釜姘撮緳澶翠箣闂撮兘鏈変竴鏉$洿鎺ョ殑閬撹矾杩炴帴(涔熷氨鏄瀯鎴愪竴涓畬鍏ㄥ浘鍛梸)銆備絾鏄疧IER闂ㄥ緢鎳掑緱锛屽苟涓旇鎬т篃涓嶅ソ锛屼粬浠彧浼氬幓璧伴偅N-1鏉″皬閬擄紝骞朵笖甯屾湜鎵€鏈夋按榫欏ご涔嬮棿淇缓鐨勯亾璺紝閮借澶т簬涓や釜姘撮緳澶翠箣鍓嶈繛鎺ョ殑鎵€鏈夊皬閬?灏忛亾褰撶劧瑕佹槸鏈€鐭殑浜?銆傛墍浠ョCOW浠紝甯偅浜汷IER浠绠椾竴涓嬪惂锛屼慨寤虹殑閭d簺閬撹矾鎬婚暱搴︽渶鐭槸澶氬皯锛屾瘯绔熶慨寤洪亾璺槸瑕佺牬璐圭殑~~

Input

 鏈涓哄缁勬暟鎹畘
 绗竴琛宼锛岃〃绀烘湁t缁勬祴璇曟暟鎹?br>  瀵逛簬姣忕粍鏁版嵁
 绗竴琛孨锛岃〃绀烘按榫欏ご鐨勪釜鏁帮紙褰撶劧涔熸槸OIER鐨勪釜鏁帮級锛?br>  2鍒癗琛岋紝姣忚涓変釜鏁存暟X,Y,Z锛涜〃绀烘按榫欏ごX鍜屾按榫欏ごY鏈変竴鏉¢暱搴︿负Z鐨勫皬閬?/div>

Output

 瀵逛簬姣忕粍鏁版嵁锛岃緭鍑轰竴涓暣鏁帮紝琛ㄧず淇缓鐨勬墍鏈夐亾璺€婚暱搴︾殑鏈€鐭€笺€?/div>

Sample Input

2
3
1 2 2
1 3 3
4
1 2 3
2 3 4
3 4 5 

Sample Output

4
17 

瑕佹妸鏈€灏忕敓鎴愭爲鎵╁厖涓哄畬鍏ㄥ浘锛屼笖淇濊瘉鏈€灏忕敓鎴愭爲鍞竴锛屼笉鍙?br>閭d箞鎴戜滑鑰冭檻鎶奒ruskal鍋氭渶灏忕敓鎴愭爲鐨勫仛娉?br>棣栧厛鎶婂悇瀹氱偣鍒嗕负n涓泦鍚堬紝鐒跺悗涓嶆柇閫氳繃鍔犺交閲忕骇杈规潵鎵╁厖鏈€灏忕敓鎴愭爲
鑰冭檻寰楀埌涓や釜鍒嗗壊s1,s2,鑻ュ浜庝换鎰弖灞炰簬s1,v灞炰簬s2锛?u,v)!=(x,y)
閭d箞鍦ㄥ畬鍏ㄥ浘涓偗瀹氳鍔犲叆锛坲,v锛夎繖鏉¤竟锛?br>鍙堢煡瑕佷繚璇佺敓鎴愭爲鍞竴锛屽嵆瑕佷繚璇侊紙x,y锛変负杞婚噺绾ц竟
鎵€浠(u,v)=w(x,y)+1
鎵€浠ユ灇涓炬瘡鏉?x,y),閫氳繃涔樻硶鍘熺悊鍙煡ans+=(w(x,y)+1)*(|s1|*|s2|-1);
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

struct my{
       int x,y,w;
};

const int maxn=50000+10;

int fa[maxn],s[maxn];
my edge[maxn];

bool cmp(const my &a,const my &b){
        return a.w<b.w;
}

int getfa(int x){
    if(fa[x]==x) return x;
    return fa[x]=getfa(fa[x]);
}

int main(){
    int t;
    int x,y,w,n;
    scanf("%d",&t);
    while(t--){
        long long ans=0;
        scanf("%d",&n);
        for (int i=0;i<=n;i++) fa[i]=i,s[i]=1;
        for (int i=1;i<n;i++)
        scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].w);
        sort(edge+1,edge+n,cmp);
        for (int i=1;i<n;i++){
            int x=getfa(edge[i].x);
            int y=getfa(edge[i].y);
            if(x==y) continue;
            ans+=(long long)(edge[i].w+1)*(s[x]*s[y]-1);
            fa[x]=y;
            s[y]+=s[x];
        }
    printf("%lld
",ans);
    }
return 0;
}

 











以上是关于tyvj1391(Kruskal)的主要内容,如果未能解决你的问题,请参考以下文章

tyvj 1391 走廊泼水节最小生成树By cellur925

TYVJ1391 走廊泼水节

JoyOI1391 走廊泼水节

Android远程桌面助手(B1391)

hihocoder 1391 树状数组

离线树状数组 hihocoder 1391 Countries