求条,返回3221225725,无法运行
  • 板块学术版
  • 楼主Even_If
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/1/20 14:10
  • 上次更新2025/1/20 16:02:38
查看原帖
求条,返回3221225725,无法运行
780514
Even_If楼主2025/1/20 14:10

RT。

#include <bits/stdc++.h>

using namespace std;

#define int long long

int tt;

const int N = 2e5 + 5;

typedef pair <int, int> pii;

int n, m1, m2;

struct dsu {
	int f[N];
	
	void pre() {
		for (int i = 1; i <= n; i ++) f[i] = i;
	}
	
	int findf(int x) {
		return x == f[x] ? x : f[x] = findf(f[x]); 
	}
	
	bool pd(int x, int y) {
		x = findf(x), y = findf(y);
		
		return (x == y);
	}
	
	int merge(int x, int y) {
		x = findf(x), y = findf(y);
		
		if(x == y) return 0;
			
		f[x] = y;
		return 1;
	}
};

signed main() {
    cin >> tt;

    while (tt --) {
        cin >> n >> m1 >> m2;

        int ans = 0;
        
        vector <pii> vec;

        for (int i = 1; i <= m1; i ++) {
            int a, b;
            cin >> a >> b;
            
            vec.push_back({a, b});
        }
        
        dsu F, G;
        F.pre(), G.pre();
        
        int partf = n, partg = n;

        for (int i = 1; i <= m2; i ++) {
            int a, b;
            cin >> a >> b;

            partg -= G.merge(a, b);
        }
        
        for (auto p : vec) {
        	int u = p.first, v = p.second;
        	
        	if(G.pd(u, v)) {
        		partf -= F.merge(u, v);
			}
			
			else ans ++;
		}
		
        ans += partf - partg;

        cout << ans << endl;
    }
}
2025/1/20 14:10
加载中...