Submission #955655

#TimeUsernameProblemLanguageResultExecution timeMemory
955655Alexabcde1Railway (BOI17_railway)C++14
100 / 100
226 ms70604 KiB
#include<bits/stdc++.h> #define f first #define s second using namespace std; long long n,m,k,aa,bb,cnt,ind[100005],t,timer,in[100005],out[100005],par[100005][50],psum[100005],vis[100005],vis2[100005]; vector<pair<long long,long long> > ve; vector<long long> adj[100005]; map<pair<long long,long long>,long long> mp; vector<long long> ans; void dfs(long long x,long long pre){ vis[x]=1; in[x]=timer; timer++; par[x][0]=pre; for (int i=1;i<=40;i++) par[x][i]=par[par[x][i-1]][i-1]; cnt++; ind[x]=cnt; for (int ii=0;ii<adj[x].size();ii++){ if (!vis[adj[x][ii]]) dfs(adj[x][ii],x); } out[x]=timer; timer++; return; } bool an(long long u,long long v){ return in[u]<=in[v] && out[u]>=out[v]; } long long lca(long long u,long long v){ if (an(u,v)) return u; if (an(v,u)) return v; for (int i=39;i>=0;--i){ if (!an(par[u][i],v)) u=par[u][i]; } return par[u][0]; } void dfs2(long long x,long long pre){ vis2[x]=1; for (int i=0;i<adj[x].size();i++){ if (vis2[adj[x][i]]) continue; dfs2(adj[x][i],x); psum[x]+=psum[adj[x][i]]; } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m>>k; for (int i=1;i<n;i++){ cin>>aa>>bb; mp[{aa,bb}]=i; mp[{bb,aa}]=i; adj[aa].push_back(bb); adj[bb].push_back(aa); } dfs(1,1); while (m--){ cin>>t; ve.clear(); for (int i=0;i<t;i++){ long long tmp; cin>>tmp; ve.push_back({ind[tmp],tmp}); } sort(ve.begin(),ve.end()); for (int i=0;i<t;i++){ long long u=ve[i].s; long long v=ve[(i+1)%ve.size()].s; long long lc=lca(u,v); psum[u]++; psum[v]++; psum[lc]-=2; } } dfs2(1,1); for (int i=1;i<=n;i++) { //cout<<psum[i]<<endl; if (psum[i]>=2*k){ ans.push_back(mp[{i,par[i][0]}]); } } sort(ans.begin(),ans.end()); cout<<ans.size()<<endl; for (int i=0;i<ans.size();i++){ if (i==0) cout<<ans[i]; else cout<<" "<<ans[i]; } cout<<endl; }

Compilation message (stderr)

railway.cpp: In function 'void dfs(long long int, long long int)':
railway.cpp:17:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |  for (int ii=0;ii<adj[x].size();ii++){
      |                ~~^~~~~~~~~~~~~~
railway.cpp: In function 'void dfs2(long long int, long long int)':
railway.cpp:36:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |  for (int i=0;i<adj[x].size();i++){
      |               ~^~~~~~~~~~~~~~
railway.cpp: In function 'int main()':
railway.cpp:79:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |  for (int i=0;i<ans.size();i++){
      |               ~^~~~~~~~~~~
#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...