Submission #35457

#TimeUsernameProblemLanguageResultExecution timeMemory
35457RockyBUsmjeri (COCI17_usmjeri)C++14
126 / 140
929 ms109236 KiB
/// In The Name Of God #pragma GCC optimize("Ofast") #pragma GCC target("sse,sse2,sse3,sse3,sse4,popcnt,abm,mmx") #include <bits/stdc++.h> #define f first #define s second #define pb push_back #define pp pop_back #define mp make_pair #define sz(x) (int)x.size() #define sqr(x) ((x) * 1ll * (x)) #define all(x) x.begin(), x.end() #define Kazakhstan ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0); #define nl '\n' #define ioi exit(0); typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int N = (int)3e5 + 7, inf = (int)1e9 + 7, mod = (int)1e9 + 7; const ll linf = (ll)1e18 + 7; const int dx[] = {-1, 0, 1, 0, 1, -1, -1, 1}, dy[] = {0, 1, 0, -1, 1, -1, 1, -1}; using namespace std; int n, m; int lvl[N], up[N][20], id[N]; int p[N]; vector <int> g[N], g1[N], g2[N]; unordered_map <int, int> st[N]; int get(int v, int u) { static int id = 0; if (v > u) swap(v, u); if (!st[v].count(u)) st[v][u] = ++id; return st[v][u]; } int tmr; int tin[N], tout[N]; void dfs(int v = 1, int p = 0) { lvl[v] = lvl[p] + 1; up[v][0] = p; tin[v] = ++tmr; for (int i = 1; i <= 19; i++) { up[v][i] = up[up[v][i - 1]][i - 1]; } for (auto to : g[v]) { if (to != p) { id[to] = get(v, to); dfs(to, v); } } tout[v] = tmr; } bool upper(int x, int y) { return tin[x] <= tin[y] && tout[y] <= tout[x]; } int lca(int x, int y, int ok = 0) { if (upper(x, y)) return x; if (upper(y, x)) return y; if (ok == 2) swap(x, y); for (int i = 19; i >= 0; i--) { if (up[x][i] && !upper(up[x][i], y)) { x = up[x][i]; } } if (ok) return id[x]; return up[x][0]; } bool was[N]; int clr[N]; void dfs1(int v) { was[v] = 1; for (auto to : g1[v]) { if (!was[to]) { clr[to] = clr[v]; dfs1(to); } else if (clr[to] != clr[v]) { cout << 0, ioi } } for (auto to : g2[v]) { if (!was[to]) { clr[to] = 3 - clr[v]; dfs1(to); } else if (clr[to] == clr[v]) { cout << 0, ioi } } } int nxt(int v) { if (p[v] == v) return v; return p[v] = nxt(p[v]); } void go(int v, int u, int type) { int laste = -1, lastv = -1; while (lvl[v] > lvl[u]) { int cur = id[v]; if (laste != -1) { if (type == 1) { g1[cur].pb(laste); g1[laste].pb(cur); } else { g2[cur].pb(laste); g2[laste].pb(cur); } p[lastv] = v; } laste = cur; lastv = v; v = up[nxt(v)][0]; } } int main() { #ifdef IOI2018 freopen ("in.txt", "r", stdin); freopen ("E.out", "w", stdout); #endif scanf ("%d%d", &n, &m); for (int i = 1; i < n; i++) { int v, u; scanf ("%d%d", &v, &u); g[v].pb(u); g[u].pb(v); } dfs(); for (int i = 1; i <= n; i++) { p[i] = i; } for (int i = 1; i <= m; i++) { int x, y; scanf ("%d%d", &x, &y); int batya = lca(x, y); if (batya == x || batya == y) { if (batya == x) swap(x, y); go(x, y, 1); } else { go(x, batya, 1); go(y, batya, 2); int last1 = lca(x, y, 1), last2 = lca(x, y, 2); g2[last1].pb(last2); g2[last2].pb(last1); } } int ans = 1; for (int i = 1; i < n; i++) { if (!was[i]) { clr[i] = 1; dfs1(i); ans = ans * 1ll * 2 % mod; } } cout << ans; ioi }

Compilation message (stderr)

usmjeri.cpp: In function 'int main()':
usmjeri.cpp:137:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf ("%d%d", &n, &m);
                        ^
usmjeri.cpp:140:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf ("%d%d", &v, &u);
                         ^
usmjeri.cpp:150:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf ("%d%d", &x, &y);
                         ^
#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...