CodeForces - 1559D2 Mocha and Diana (Hard Version)(思维)
生活随笔
收集整理的這篇文章主要介紹了
CodeForces - 1559D2 Mocha and Diana (Hard Version)(思维)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:給出兩棵森林,每次可以同時在兩個森林中增加同一條邊,問最多可以增加多少條邊,使得兩個森林仍然還是森林
題目分析:結論參考至:https://blog.csdn.net/RunningBeef/article/details/119738571?utm_source=app&app_version=4.13.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
首先對于所有的點嘗試與點 111 建邊,此后考慮除了點 111 以外的聯通塊。假設兩個森林中的聯通塊集合分別為 s1s1s1 和 s2s2s2,那么令 s1s1s1 中的連通塊和 s2s2s2 中的任意一個連通塊相連都是合法的
代碼:
// Problem: D2. Mocha and Diana (Hard Version) // Contest: Codeforces - Codeforces Round #738 (Div. 2) // URL: https://codeforces.com/contest/1559/problem/D2 // Memory Limit: 256 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2) // #pragma GCC optimize("Ofast","inline","-ffast-math") // #pragma GCC target("avx,sse2,sse3,sse4,mmx") #include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> #include<cassert> #include<bitset> #include<list> #include<unordered_map> #define lowbit(x) (x&-x) using namespace std; typedef long long LL; typedef unsigned long long ull; template<typename T> inline void read(T &x) {T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f; } template<typename T> inline void write(T x) {if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0'); } const int inf=0x3f3f3f3f; const int N=1e6+100; int f1[N],f2[N]; int find1(int x) {return f1[x]==x?x:f1[x]=find1(f1[x]); } int find2(int x) {return f2[x]==x?x:f2[x]=find2(f2[x]); } bool check1(int x,int y) {int xx=find1(x),yy=find1(y);if(xx!=yy) {return true;}return false; } bool check2(int x,int y) {int xx=find2(x),yy=find2(y);if(xx!=yy) {return true;}return false; } void merge1(int x,int y) {int xx=find1(x),yy=find1(y);f1[xx]=yy; } void merge2(int x,int y) {int xx=find2(x),yy=find2(y);f2[xx]=yy; } void init() {for(int i=0;i<N;i++) {f1[i]=f2[i]=i;} } int main() { #ifndef ONLINE_JUDGE // freopen("data.in.txt","r",stdin); // freopen("data.out.txt","w",stdout); #endif // ios::sync_with_stdio(false);init();int n,m1,m2;cin>>n>>m1>>m2;for(int i=1;i<=m1;i++) {int u,v;read(u),read(v);merge1(u,v);}for(int i=1;i<=m2;i++) {int u,v;read(u),read(v);merge2(u,v);}vector<pair<int,int>>ans;vector<int>rt1,rt2;for(int i=2;i<=n;i++) {if(check1(1,i)&&check2(1,i)) {merge1(1,i),merge2(1,i);ans.push_back({1,i});}}for(int i=2;i<=n;i++) {if(find1(i)==i&&check1(1,i)) {rt1.push_back(i);}if(find2(i)==i&&check2(1,i)) {rt2.push_back(i);}}for(int i=0;i<(int)min(rt1.size(),rt2.size());i++) {ans.push_back({rt1[i],rt2[i]});}cout<<ans.size()<<endl;for(auto it:ans) {cout<<it.first<<' '<<it.second<<endl;}return 0; }總結
以上是生活随笔為你收集整理的CodeForces - 1559D2 Mocha and Diana (Hard Version)(思维)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021HDU多校9 - 7073 In
- 下一篇: 2021牛客多校9 - Cells(推公