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>
绗竴琛宼锛岃〃绀烘湁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)的主要内容,如果未能解决你的问题,请参考以下文章