【題解】Codeforces 1466F. Euclid’s nightmare

【題目敘述】http://codeforces.com/contest/1466/problem/F

#include <bits/stdc++.h>
using namespace std;
 
int n, m, p[500005];
vector <int> v;
 
int f(int x){
    if (p[x] == x) return x;
    return p[x] = f(p[x]);
}
 
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= m; i++){
        p[i] = i;
    }
    int tmp, ans = 1, mod = 1e9+7;
    for (int i = 1; i <= n; i++){
        cin >> tmp;
        int a, b;
        if (tmp == 1){
            a = 0;
            cin >> b;
        }
        else cin >> a >> b;
        a = f(a);
        b = f(b);
        if (f(a) == f(b)) continue;
        v.push_back(i);
        ans *= 2;
        ans %= mod;
        p[b] = a;
    }
    cout << ans << " " << v.size() << "\n";
    for (auto i:v){
        cout << i << " ";
    }
    cout << "\n";
}
分享本文 Share with friends