Submission #1241615

#TimeUsernameProblemLanguageResultExecution timeMemory
1241615altern23Usmjeri (COCI17_usmjeri)C++20
0 / 140
291 ms1012 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll, ll> #define fi first #define sec second #define ld long double const int MAXN = 5e3; const ll INF = 1e18; const int MOD = 1e9 + 7; const ld eps = 1e-6; ll d[MAXN + 5]; struct DSU{ ll N; vector<ll> par; DSU(ll _n){ N = _n; par.resize(N + 5); for(int i = 1; i <= N; i++) par[i] = i; } ll find(ll idx){ return (par[idx] == idx ? idx : par[idx] = find(par[idx])); } void join(ll a, ll b){ a = find(a), b = find(b); if(a == b) return; par[b] = a; } }; vector<pii> adj[MAXN + 5]; pii up[MAXN + 5]; ll dist[MAXN + 5]; void init(ll idx, ll par){ for(auto [i, j] : adj[idx]){ if(i != par){ dist[i] = dist[idx] + 1; init(i, idx); } } } void dfs(ll idx, ll par){ for(auto [i, j] : adj[idx]){ if(i != par){ up[i] = {idx, j}; dfs(i, idx); } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; for(;tc--;){ ll N, M; cin >> N >> M; for(int i = 1; i < N; i++){ d[i] = -1; ll u, v; cin >> u >> v; adj[u].push_back({v, i}), adj[v].push_back({u, i}); } DSU dsu(N); init(1, -1); bool ok = 1; for(int i = 1; i <= M; i++){ ll a, b; cin >> a >> b; dfs(a, -1); ll tmp = b; ll status = -1; while(tmp != a){ if(d[up[tmp].sec] != -1){ if(status != -1 && status != ((dist[tmp] < dist[up[tmp].fi]) ^ (d[up[tmp].sec]))){ ok = 0; break; } status = ((dist[tmp] < dist[up[tmp].fi]) ^ (d[up[tmp].sec])); } tmp = up[tmp].fi; } if(status == -1) status = 0; tmp = b; ll last = -1; while(tmp != a){ d[up[tmp].sec] = (status ^ (dist[tmp] < dist[up[tmp].fi])); if(last == -1) last = up[tmp].sec; else dsu.join(last, up[tmp].sec); tmp = up[tmp].fi; } } if(!ok){ cout << 0 << "\n"; continue; } ll ans = 1; for(int i = 1; i < N; i++){ if(dsu.find(i) == i) ans = ans * 2LL % MOD; } cout << ans << "\n"; } } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...