Submission #667643

#TimeUsernameProblemLanguageResultExecution timeMemory
667643berrStar Trek (CEOI20_startrek)C++17
30 / 100
64 ms11440 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N=1e5+37; vector<int> adj[N], adj2[N]; int huh, huuh, mod=1e9+7; int st[N][2], ans=0; int mul(int x, int y){ return (x*y)%mod; } int sum(int x, int y){ return((x+y)%mod+mod)%mod; } int poww(int x, int y) { if(y==0) return 1; int tmp=poww(x, y/2); if(y%2) return mul(tmp, mul(tmp, x)); return mul(tmp, tmp); } int dfs2(int v, int p, int d) { int f=1; if(d%2==0) f=0; int count=0, val=0; for(auto i: adj2[v]) { if(i==p) continue; if(dfs2(i, v, d+1)) { if(d%2==0){ f=1; } } else { if(d%2) f=0; } } return f; } int dfs(int v, int p, int d) { int f=1; if(d%2==0) f=0; for(auto i: adj[v]) { if(i==p) continue; if(dfs(i, v, d+1)) { if(d%2==0){ f=1; } } else { if(d%2) f=0; } } if(huh==v) { if(st[huuh][((d+1)%2+2)%2]) { if(d%2==0) f=1; } else { if(d%2) f=0; } } return f; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, d; cin>>n>>d; for(int i=0; i<n-1; i++){ int x, y; cin>>x>>y; adj[x].push_back(y); adj[y].push_back(x); adj2[x].push_back(y); adj2[y].push_back(x); } int ans=0; if(d>1) { cout<<poww(4, d); } else if(n<=1e4) { for(int i=1; i<=n; i++) { st[i][0]=dfs2(i, 0, 0); st[i][1]=dfs2(i, 0, 1); } int x=-1, y=-1, allx=0, ally=0; for(int i=1; i<=n; i++){ if(st[i][0]) x=i, allx++; if(st[i][1]) y=i, ally++; } for(int i=1; i<=n; i++) { if(x!=-1){ huh=i; huuh=x; if(dfs(1, 0, 0)) ans=sum(ans, allx); } if(y!=-1) { huh=i; huuh=y; if(dfs(1, 0, 0)) ans=sum(ans, ally); } } cout<<ans; } }

Compilation message (stderr)

startrek.cpp: In function 'long long int dfs2(long long int, long long int, long long int)':
startrek.cpp:30:9: warning: unused variable 'count' [-Wunused-variable]
   30 |     int count=0, val=0;
      |         ^~~~~
startrek.cpp:30:18: warning: unused variable 'val' [-Wunused-variable]
   30 |     int count=0, val=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...