Submission #886692

#TimeUsernameProblemLanguageResultExecution timeMemory
886692vjudge1Usmjeri (COCI17_usmjeri)C++17
28 / 140
124 ms28640 KiB
#include <bits/stdc++.h> using namespace std; using i64 = long long; const int MAXN = 3E5 + 5; const int MOD = 1E9 + 7; int par[MAXN]; struct DSU { int n; DSU(int n) : n(n) { // 23 orz iota(par, par + n, 0); } int get(int x) { if(par[x] == x) { return x; } return par[x] = get(par[x]); } bool same(int a, int b) { return get(a) == get(b); } bool unite(int u, int v) { if(same(u, v)) { return false; } u = get(u); v = get(v); par[u] = v; return true; } }; #define ONLINE_JUDGE void solve() { int n, m; cin >> n >> m; vector <int> adj[n +1]; for(int i = 1; i <= n -1; i++) { int u, v; cin >> u >> v; adj[u].emplace_back(v); adj[v].emplace_back(u); } DSU dsu(n +1); for(int i = 1; i <= m; i++) { int l, r; cin >> l >> r; if(l > r) { swap(l, r); } for(int i = dsu.get(l); i +1 <= r; i = dsu.get(i +1)) { //cerr << i << " " << i +1 << " :: " << dsu.get(i) << " " << dsu.get(i +1) << "\n"; dsu.unite(i, i +1); } } int ans = 1; for(int i = 1; i <= n; i++) { if(dsu.get(i) == i) { ans = (ans * 2) % MOD; } } cout << ans; return; } signed main() { #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int t = 1; //cin >> t; for(int i = 1; i <= t; i++) { solve(); } return 0; }
#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...