Submission #551733


Source Code Expand

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
//#include<cctype>
#include<climits>
#include<iostream>
#include<string>
#include<vector>
#include<map>
//#include<list>
#include<queue>
#include<deque>
#include<algorithm>
//#include<numeric>
#include<utility>
#include<complex>
//#include<memory>
#include<functional>
#include<cassert>
#include<set>
#include<stack>

const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int, int> pii;

struct UnionFind {
    vector<int> par;
    int n, cnt;
    UnionFind(const int& x = 0) {init(x);}
    void init(const int& x) {par.assign(cnt=n=x, -1);}
    inline int find(const int& x) {return par[x] < 0 ? x : par[x] = find(par[x]);}
    inline bool same(const int& x, const int& y) {return find(x) == find(y);}
    inline bool unite(int x, int y) {
        if ((x = find(x)) == (y = find(y))) return false;
        --cnt;
        if (par[x] > par[y]) swap(x, y);
        par[x] += par[y];
        par[y] = x;
        return true;
    }
    inline int count() const {return cnt;}
    inline int count(int x) {return -par[find(x)];}
};

const int MAX = 505050;
const ll MOD = 1e9+7;
int N, M;
ll p2[MAX];
int odd[MAX];
vector<pair<int, ll> > E[MAX];

ll dfs(int v, int pre) {
    ll ret = 0;
    for (auto p : E[v]) if (p.first != pre) {
        ret += dfs(p.first, v);
        if (odd[p.first] == 0) ret += p.second;
        odd[v] ^= odd[p.first];
    }
    return ret % MOD;
}

int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    int N, M;
    cin >> N >> M;
    UnionFind uf(N);
    p2[0] = 1;
    ll ret = 0;
    for (int i = 0; i < M; i++) {
        p2[i+1] = (p2[i]*2) % MOD;
        int x, y;
        cin >> x >> y;
        x--; y--;
        (ret += p2[i+1]) %= MOD;
        if (uf.same(x, y)) {
            odd[x] ^= 1;
            odd[y] ^= 1;
        } else {
            uf.unite(x, y);
            E[x].emplace_back(y, p2[i+1]);
            E[y].emplace_back(x, p2[i+1]);
        }
    }
    cout << (ret+dfs(0, -1)) % MOD << endl;
    return 0;
}

Submission Info

Submission Time
Task C - ドライブ
User mayoko
Language C++11 (GCC 4.8.1)
Score 110
Code Size 2241 Byte
Status AC
Exec Time 655 ms
Memory 56428 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 40 / 40 70 / 70
Status
AC × 2
AC × 20
AC × 33
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
Subtask1 sample_01.txt, sample_02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt
Subtask2 subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt
Case Name Status Exec Time Memory
sample_01.txt AC 50 ms 12652 KB
sample_02.txt AC 49 ms 12648 KB
subtask1_01.txt AC 48 ms 12656 KB
subtask1_02.txt AC 48 ms 12648 KB
subtask1_03.txt AC 48 ms 12656 KB
subtask1_04.txt AC 49 ms 12776 KB
subtask1_05.txt AC 47 ms 12760 KB
subtask1_06.txt AC 50 ms 12780 KB
subtask1_07.txt AC 49 ms 12784 KB
subtask1_08.txt AC 50 ms 12776 KB
subtask1_09.txt AC 49 ms 12780 KB
subtask1_10.txt AC 49 ms 12908 KB
subtask1_11.txt AC 50 ms 12780 KB
subtask1_12.txt AC 49 ms 12788 KB
subtask1_13.txt AC 49 ms 13044 KB
subtask1_14.txt AC 47 ms 12780 KB
subtask1_15.txt AC 49 ms 12776 KB
subtask1_16.txt AC 47 ms 12900 KB
subtask1_17.txt AC 52 ms 12776 KB
subtask1_18.txt AC 49 ms 12648 KB
subtask2_01.txt AC 565 ms 40300 KB
subtask2_02.txt AC 559 ms 40100 KB
subtask2_03.txt AC 441 ms 38484 KB
subtask2_04.txt AC 599 ms 41196 KB
subtask2_05.txt AC 557 ms 39912 KB
subtask2_06.txt AC 551 ms 39404 KB
subtask2_07.txt AC 372 ms 36044 KB
subtask2_08.txt AC 655 ms 56428 KB
subtask2_09.txt AC 618 ms 41000 KB
subtask2_10.txt AC 144 ms 19044 KB
subtask2_11.txt AC 146 ms 15860 KB
subtask2_12.txt AC 355 ms 29532 KB
subtask2_13.txt AC 523 ms 37464 KB
subtask2_14.txt AC 544 ms 39536 KB
subtask2_15.txt AC 182 ms 16616 KB