답안 #659568

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
659568 2022-11-18T14:26:51 Z Lobo Star Trek (CEOI20_startrek) C++17
38 / 100
120 ms 52760 KB
#include<bits/stdc++.h>
using namespace std;
const long long inf = (long long) 1e18 + 10;
const int inf1 = (int) 1e9 + 10;
#define int long long
#define dbl long double
#define endl '\n'
#define sc second
#define fr first
#define mp make_pair
#define pb push_back
#define all(x) x.begin(), x.end()

const int maxn = 5e5+10;
const int mod = 1e9+7;

int n, d, SL, SW, dpw[maxn][2], dpl[maxn][2], dpwup[maxn][2], dplup[maxn][2];
vector<int> g[maxn];

void dfs1(int u, int ant) {
    dpw[u][1] = SW*dpw[u][0] + SL*(dpw[u][0]+dpl[u][0]); dpw[u][1]%= mod;
    dpl[u][1] = SW*dpl[u][0]; dpl[u][1]%= mod;

    int qtl = 0;
    for(auto v : g[u]) if(v != ant) {
        qtl+= dpl[v][0];
        dfs1(v,u);
    }

    for(auto v : g[u]) if(v != ant) {
        qtl-= dpl[v][0];
        if(qtl) {
            dpw[u][1]+= dpw[v][1]+dpl[v][1]; dpw[u][1]%= mod;
            dpl[u][1]+= 0;
        }
        else {
            dpw[u][1]+= dpl[v][1]; dpw[u][1]%= mod;
            dpl[u][1]+= dpw[v][1]; dpl[u][1]%= mod;
        }
        qtl+= dpl[v][0];
    }
}

map<int,int> wp[maxn];
int solwp(int u, int ant) {
    if(wp[u].count(ant)) return wp[u][ant];
    wp[u][ant] = 0;
    for(auto v : g[u]) if(v != ant) {
        if(solwp(v,u) == 0) wp[u][ant] = 1;
    }
    return wp[u][ant];
}

// void dfs0(int u, int ant) {
//     dpw[u][0] = 0;
//     for(auto v : g[u]) if(v != ant) {
//         dfs0(v,u);
//     }
//     for(auto v : g[u]) if(v != ant) {
//         if(solwp(v,u) == 0) dpw[u][0] = 1;
//     }
//     dpl[u][0] = 1-dpw[u][0];
// }

void dfs0(int u, int ant) {
    dpw[u][0] = 0;
    int qtl = 0;
    for(auto v : g[u]) if(v != ant) {
        dfs0(v,u);
        qtl+= dpl[v][0];
    }

    if(qtl) dpw[u][0] = 1;
    dpl[u][0] = 1-dpw[u][0];
}

void dfs0up(int u, int ant) {
    int qtl = 0;
    for(auto v : g[u]) if(v != ant) {
        qtl+= dpl[v][0];
    }

    for(auto v : g[u]) if(v != ant) {
        qtl-= dpl[v][0];
        if(qtl || dpwup[u][0]) {
            dpwup[v][0] = 0;
            dplup[v][0] = 1-dpwup[v][0];
        }
        else {
            dpwup[v][0] = 1;
            dplup[v][0] = 1-dpwup[v][0];
        }
        qtl+= dpl[v][0];
    }

    for(auto v : g[u]) if(v != ant) {
        dfs0up(v,u);
    }
}
void solve() {
    cin >> n >> d;

    for(int i = 1; i <= n-1; i++) {
        int u,v; cin >> u >> v;
        g[u].pb(v);
        g[v].pb(u);
    }

    dfs0(1,0);
    dpwup[1][0] = 0;
    dplup[1][0] = 1;
    dfs0up(1,0);
    for(int i = 1; i <= n; i++) {
        if(dpw[i][0] || dpwup[i][0]) SW++;
        else SL++;
    }

    dfs1(1,0);

    cout << dpw[1][1] << endl;
}

int32_t main() {
    ios::sync_with_stdio(false); cin.tie(0);

    // freopen("in.in", "r", stdin);
    // freopen("out.out", "w", stdout);
    int tt = 1;
    // cin >> tt;
    while(tt--) {
        solve();
    }

}
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 35540 KB Output is correct
2 Incorrect 22 ms 35672 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 17 ms 35540 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 35540 KB Output is correct
2 Correct 21 ms 35540 KB Output is correct
3 Correct 20 ms 35524 KB Output is correct
4 Correct 17 ms 35540 KB Output is correct
5 Correct 19 ms 35572 KB Output is correct
6 Correct 17 ms 35540 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 35540 KB Output is correct
2 Correct 21 ms 35540 KB Output is correct
3 Correct 20 ms 35524 KB Output is correct
4 Correct 17 ms 35540 KB Output is correct
5 Correct 19 ms 35572 KB Output is correct
6 Correct 17 ms 35540 KB Output is correct
7 Correct 19 ms 35668 KB Output is correct
8 Correct 20 ms 35748 KB Output is correct
9 Correct 17 ms 35628 KB Output is correct
10 Correct 18 ms 35588 KB Output is correct
11 Correct 19 ms 35700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 35540 KB Output is correct
2 Correct 21 ms 35540 KB Output is correct
3 Correct 20 ms 35524 KB Output is correct
4 Correct 17 ms 35540 KB Output is correct
5 Correct 19 ms 35572 KB Output is correct
6 Correct 17 ms 35540 KB Output is correct
7 Correct 19 ms 35668 KB Output is correct
8 Correct 20 ms 35748 KB Output is correct
9 Correct 17 ms 35628 KB Output is correct
10 Correct 18 ms 35588 KB Output is correct
11 Correct 19 ms 35700 KB Output is correct
12 Correct 90 ms 48664 KB Output is correct
13 Correct 120 ms 52760 KB Output is correct
14 Correct 69 ms 45300 KB Output is correct
15 Correct 84 ms 46408 KB Output is correct
16 Correct 95 ms 46572 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 35540 KB Output is correct
2 Correct 21 ms 35540 KB Output is correct
3 Correct 20 ms 35524 KB Output is correct
4 Correct 17 ms 35540 KB Output is correct
5 Correct 19 ms 35572 KB Output is correct
6 Correct 17 ms 35540 KB Output is correct
7 Correct 19 ms 35668 KB Output is correct
8 Correct 20 ms 35748 KB Output is correct
9 Correct 17 ms 35628 KB Output is correct
10 Correct 18 ms 35588 KB Output is correct
11 Correct 19 ms 35700 KB Output is correct
12 Correct 19 ms 35540 KB Output is correct
13 Incorrect 18 ms 35676 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 35540 KB Output is correct
2 Correct 21 ms 35540 KB Output is correct
3 Correct 20 ms 35524 KB Output is correct
4 Correct 17 ms 35540 KB Output is correct
5 Correct 19 ms 35572 KB Output is correct
6 Correct 17 ms 35540 KB Output is correct
7 Correct 19 ms 35668 KB Output is correct
8 Correct 20 ms 35748 KB Output is correct
9 Correct 17 ms 35628 KB Output is correct
10 Correct 18 ms 35588 KB Output is correct
11 Correct 19 ms 35700 KB Output is correct
12 Correct 90 ms 48664 KB Output is correct
13 Correct 120 ms 52760 KB Output is correct
14 Correct 69 ms 45300 KB Output is correct
15 Correct 84 ms 46408 KB Output is correct
16 Correct 95 ms 46572 KB Output is correct
17 Correct 19 ms 35540 KB Output is correct
18 Incorrect 18 ms 35676 KB Output isn't correct
19 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 35540 KB Output is correct
2 Incorrect 22 ms 35672 KB Output isn't correct
3 Halted 0 ms 0 KB -