Submission #935508

#TimeUsernameProblemLanguageResultExecution timeMemory
935508Mohammadamin__ShSumtree (INOI20_sumtree)C++17
30 / 100
3058 ms46880 KiB
//In His Name #include <bits/stdc++.h> //#pragma GCC optimize("O3,unroll-loops") //#pragma GCC target("avx2") using namespace std; #define ll long long #define int ll typedef pair<int, int> pii; #define F first #define S second #define pb push_back #define bug(x) cout << "Ah shit , here we go again : " << x <<endl #define all(x) x.begin() , x.end() const int maxn = 5e5 + 10, MOD = 1e9 + 7; const ll INF = 1e18 + 100; int n , r ,q , fact[maxn] , ans = 1, sub[maxn] , num[maxn] , sham[maxn]; vector<int> adj[maxn]; int is[maxn]; ll Power(ll x , ll y){ if(y < 0 or x < 0) return 0; if(y == 0) return 1; ll tmp = Power(x , y/2); tmp = 1ll * tmp * tmp % MOD; if(y&1) tmp = 1ll * x * tmp % MOD; return tmp % MOD; } ll tarkib(int x , int y){ if(x == 0 or x == y) return 1; if(x > y) return 0; ll zir = fact[x] * fact[y-x] % MOD; ll res = 1ll * fact[y] * Power(zir , MOD-2); return res%MOD; } void Pre(int v = 1 , int p = 0){ sub[v] = 1; for(int u : adj[v]) { if(u != p){ Pre(u , v); sub[v] += sub[u]; } } } void Dfs(int v , int p){ int sum = 0; for(int u : adj[v]){ if(u == p) continue; Dfs(u , v); if(ans == 0) return; sum += num[u]; sham[v] += sham[u]; } if(is[v] != -1){ if(is[v] < sum) { ans = 0; return; } ans = (ans * tarkib(sub[v] - sham[v] - 1 , is[v] - sum + sub[v] - sham[v] - 1)) % MOD; int x = ans; num[v] = is[v]; sham[v] = sub[v]; } else num[v] = sum; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0) , cout.tie(0); fact[0] = 1; for(int i = 1 ; i < maxn ; i++) fact[i] = (fact[i-1]*i) % MOD; memset(is , -1 , sizeof is); cin >> n >> r; is[1] = r; for(int i = 1 ; i <= n-1 ; i++){ int u , v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } Pre(); cin >> q; while(q--){ int ty; cin >> ty; memset(sham , 0 , sizeof sham); memset(num , 0 , sizeof num); ans = 1; Dfs(1 , 0); cout << ans << '\n'; if(ty == 1){ int v , w; cin >> v >> w; is[v] = w; } else{ int v; cin >> v; is[v] = -1; } } memset(sham , 0 , sizeof sham); memset(num , 0 , sizeof num); ans = 1; Dfs(1 , 0); cout << ans << '\n'; }

Compilation message (stderr)

Main.cpp: In function 'void Dfs(long long int, long long int)':
Main.cpp:63:13: warning: unused variable 'x' [-Wunused-variable]
   63 |         int x = ans;
      |             ^
#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...