Submission #614073

#TimeUsernameProblemLanguageResultExecution timeMemory
614073HediChehaidarPower Plant (JOI20_power)C++17
0 / 100
4 ms5024 KiB
#include<bits/stdc++.h> typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef double db; ll gcd(ll a , ll b) {return b ? gcd(b , a % b) : a ;} // greatest common divisor (PGCD) ll lcm(ll a , ll b) {return (a * b) / gcd(a , b);} // least common multiple (PPCM) #define ss second #define ff first #define all(x) (x).begin() , (x).end() #define pb push_back #define vi vector<int> #define vii vector<pair<int,int>> #define vl vector<ll> #define vll vector<pair<ll,ll>> #define pii pair<int,int> #define pll pair<ll,ll> #define pdd pair<double,double> #define vdd vector<pdd> #define dte tuple<double , double , double> using namespace std; const int INF = 1000*1000*1000; // 1 e 9 const int MOD = 1e9 + 7;//998244353 ; const double EPS = 0.000000001; // 1 e -9 const ll inf = (ll)1e18; int n; vi adj[(int)2e5 + 10]; int p[(int)2e5 + 10]; int down[(int)2e5 + 10]; int s[(int)2e5 + 10]; int sub[(int)2e5 + 10]; int ans = 0; void dfs2(int pos , int par){ } void dfs(int pos , int par){ sub[pos] = s[pos]; for(auto c : adj[pos]){ if(c != par){ dfs(c , pos); sub[pos] += sub[c]; } } if(sub[pos] == 1) { down[pos] = 1; return; } for(auto c : adj[pos]){ if(c != par){ if(s[pos] && sub[pos] == sub[c] + 1){ ans = max(ans , down[c] + 1 ); } down[pos] += down[c]; } } if(s[pos]) down[pos]--; } int main(){ //ifstream fin ("testing.txt"); //ofstream fout ("output.txt"); ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>n; if(n > 2020) return 0; for(int i = 0 ; i < n - 1 ; i++){ int a , b; cin>>a>>b; adj[a].pb(b); adj[b].pb(a); } /*for(int i = 1 ; i <= n ; i++) { cout << i << " : "; for(auto c : adj[i]) cout << c << " "; cout << "\n"; }*/ string ch; cin>>ch; for(int i = 1 ; i <= n ; i++) s[i] = ch[i - 1] == '1'; for(int i = 1 ; i <= n ; i++){ for(int j = 1 ; j <= n ; j++){ down[j] = sub[j] = 0; } dfs(i , 0); for(int j = 1 ; j <= n ; j++) ans = max(ans , down[j]); //if(i == 1) for(int j = 1 ; j <= n ; j++) cout << down[j] << " "; //cout << ans << "\n"; } cout << ans << "\n"; return 0; } /* Think of : BS / DFS / BFS / SSSP / SCC / MSP / MAX FLOW / TOPSORT / LCA / MATRIX / DP(bitmask) / 2 POINTERS / SEG TREE / MATH / UN FIND / MO / HLD Read the statement CAREFULLY !! Make a GREADY APPROACH !!!! (start from highest / lowest) Make your own TESTS !! Be careful from CORNER CASES ! */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...