比赛 csp2025模拟练习1 评测结果 WTWEWTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
题目名称 通讯网络 最终得分 0
用户昵称 淮淮清子 运行时间 180.218 s
代码语言 C++ 内存使用 4.07 MiB
提交时间 2025-10-28 11:59:11
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

const int MAXN = 1e6 + 5;
struct Op{
	int t, x, y, k;
}ans[MAXN];


int E, N, Q, last = 0;

pii norm(int x, int y){
	return x > y ? make_pair(y, x) : make_pair(x, y);
}

struct DSU{
    vector<int> p;
    DSU(int n) : p(n + 1){
		iota(p.begin(), p.end(), 0);
	}
    int find(int u){
		return p[u] == u ? u : p[u] = find(p[u]);
	}
    void unite(int u, int v){
		u = find(u), v = find(v);
		if(u != v) p[u] = v;
	}
};

int main(){
	freopen("communication.in", "r", stdin);
	freopen("communication.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> E >> N >> Q;
    for(int q = 1;q <= Q;q ++){
        int op; cin >> op;
        if(op == 1 || op == 2){
            int x, y; cin >> x >> y;
            if(E) x ^= last, y ^= last;
            pii e = norm(x, y);
            ans[q] = {op, e.first, e.second, 0};
        }
		else{
            int t; cin >> t;
            if(E) t ^= last;
            ans[q] = {op, 0, 0, t};
            int s = q, st = max(0, s - t);
            unordered_set<ll> ps;
            for(int qp = st;qp <= s;qp ++){
                set<pii> es;
                for(int i = 1;i < qp;i ++){
                    if(ans[i].t == 1){
                    	es.insert({ans[i].x, ans[i].y});
					}
                    else if(ans[i].t == 2){
                    	es.erase({ans[i].x, ans[i].y});
					}
                }
                DSU dsu(N);
                for(auto it = es.begin();it != es.end();it ++){
                	dsu.unite(it -> first, it -> second);
				}
                for(int u = 1;u <= N;u ++){
                	for(int v = u + 1;v <= N;v ++){
                		if(dsu.find(u) == dsu.find(v)) ps.insert(1LL * u * (N + 1) + v);
					}
				}
            }
            last = ps.size();
            cout << last << '\n';
        }
    }
    return 0;
}