国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Fools and Foolproof Roads CodeForces - 362D

2019-11-06 06:36:35
字體:
來源:轉載
供稿:網友

題目鏈接

大意 : 給出一個圖,n個點,m條邊,想要修p條路,使得圖的連通分量是q; 如果滿足要求,就輸出p條路,并且使得花費最小

思路: 使用并查集來做,并使用了一個len數組來記錄每一個連通分量里面總的路線長度, now ->原圖的連通分量,q>now的時候直接輸出NO,否則如下表討論

條件 結果
now-q>q NO
p>=now-q && m!=0 YES
p>=now-q m==0 && q!=0 NO
p>=now-q m==0 && q==0 YES
#include <iostream>#include <cstdio>#include <set>#include <algorithm>#include <queue>using namespace std ;typedef long long LL ;const int maxn = 1e5+5 ;struct node { int index; long long value; node ( int x,long long y ) { index = x; value = y; } bool Operator < ( const node &a ) const { if ( value==a.value ) return index<a.index; return value<a.value; }};int f[maxn];long long len[maxn];int find( int x) { return f[x]==x?x:find(f[x]); }vector<int> L;vector<int> R;set<node> s;set<node>::iterator sit;void solve() { sit = s.begin(); node a1 = *sit; s.erase(sit); sit = s.begin(); node a2 = *sit; s.erase(sit); LL temp = min( (long long)10e9,a2.value+a1.value+1 ) ; //!!!!!!!!! L.push_back(a1.index); R.push_back(a2.index); s.insert(node( a1.index , temp+a2.value+a1.value)); return ;}void init( int n ) { for ( int i=1; i<=n; i++ ) f[i] = i ;}int main(){ int n,m,p,q; int a,b,c; int fa,fb,fc; int ned=0,ned2=0; cin>>n>>m>>p>>q; init(n); for ( int l=0; l<m; l++ ) { scanf("%d%d%d",&a,&b,&c); fa = find(a); fb = find(b); if ( fa==fb ) len[fa] += c; else { f[fa] = fb; len[fb] += len[fa] + c ; } } for ( int i=1; i<=n ; i++ ) { if ( f[i]==i ) { s.insert(node(i,len[i])); } } if ( s.size()<q ) cout<<"NO"<<endl; else { if ( p+q<s.size() ) cout<<"NO"<<endl; else { if ( s.size()==q && m==0 &&p!=0 ) cout<<"NO"<<endl; //特別注意的情況 else { ned = s.size()-q; ned2 = p-ned; for ( int i=0; i<ned; i++ ) solve(); cout<<"YES"<<endl; for ( int i=0; i<ned; i++ ) cout<<L[i]<<" "<<R[i]<<endl; if ( m==0 ) { a = 1;b=2; } while ( ned2-- ) { cout<<a<<" "<<b<<endl; } } } } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 两当县| 和林格尔县| 榆社县| 霍城县| 龙门县| 嵊泗县| 通河县| 布拖县| 昭苏县| 达孜县| 西乡县| 加查县| 平罗县| 图木舒克市| 柏乡县| 永修县| 虎林市| 新晃| 象州县| 亳州市| 昌江| 沙田区| 扎赉特旗| 新野县| 永寿县| 睢宁县| 密云县| 黑龙江省| 麻栗坡县| 珲春市| 隆安县| 民丰县| 洞头县| 勃利县| 定西市| 鄂州市| 苏州市| 揭阳市| 西城区| 平顺县| 宝清县|