Submission #566879

#TimeUsernameProblemLanguageResultExecution timeMemory
566879azberjibiouStar Trek (CEOI20_startrek)C++17
0 / 100
5 ms5204 KiB
#include <bits/stdc++.h> #define gibon ios::sync_with_stdio(false); cin.tie(0); #define fir first #define sec second #define pdd pair<long double, long double> #define pii pair<int, int> #define pll pair<ll, ll> #define ld long double #define pmax pair<__int128, __int128> #pragma GCC optimize("O3") #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") typedef long long ll; using namespace std; int dx[4]= {0, 1, 0, -1}, dy[4]= {1, 0, -1, 0}; int ddx[8]={1, 1, 0, -1, -1, -1, 0, 1}, ddy[8]={0, 1, 1, 1, 0, -1, -1, -1}; const int mxN=100025; const int mxM=300005; const int mxK=1000000000; const ll MOD=1000'000'007; const ll INF=1000000000000000005; ll N, D; vector <int> v[mxN]; ll outw[mxN]; ll downw[mxN], upw[mxN]; ll degL[mxN]; bool W[mxN]; ll numw; void dfs_downw(int now, int pre) { for(int nxt : v[now]) if(nxt!=pre) { dfs_downw(nxt, now); } downw[now]=(outw[now]==0 ? 1 : 0); if(now!=1) outw[pre]+=downw[now]; } void dfs_upw(int now, int pre) { if(now!=1) { upw[now]=(outw[pre]-downw[now]==0 ? 1 : 0); outw[now]+=upw[now]; } for(int nxt : v[now]) if(nxt!=pre) { dfs_upw(nxt, now); } } ll dfs1(int now, int pre) { ll sum=1; for(int nxt : v[now]) if(W[nxt] && nxt!=pre) { sum+=dfs1(nxt, now); } return sum; } ll dfs2(int now, int pre) { ll sum=!W[now]; for(int nxt : v[now]) if(nxt!=pre && W[nxt]+W[now]==1) { sum+=dfs2(nxt, now); } return sum; } int main() { gibon cin >> N >> D; for(int i=1;i<N;i++) { int a, b; cin >> a >> b; v[a].push_back(b); v[b].push_back(a); } dfs_downw(1, -1); dfs_upw(1, -1); for(int i=1;i<=N;i++) if(outw[i]>=1) W[i]=true; for(int i=1;i<=N;i++) numw+=W[i]; for(int i=1;i<=N;i++) for(int ele : v[i]) degL[i]+=1-W[ele]; ll ans=0; if(W[1]) { ans=N*N; if(degL[1]==0) { assert(0==1); ans-=dfs1(1, -1)/2*(N-numw); } if(degL[1]==1) { ans-=dfs2(1, -1)*(N-numw); } } else { ans+=dfs2(1, -1)*(N-numw); } cout << 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...