Submission #1280993

#TimeUsernameProblemLanguageResultExecution timeMemory
1280993quan606303Railway (BOI17_railway)C++20
100 / 100
141 ms34700 KiB
/* * @Author: RMQuan * @Date: 2025-10-20 01:15:40 * @Last Modified by: RMQuan * @Last Modified time: 2025-10-20 02:31:53 */ /*idea : */ #include <bits/stdc++.h> bool M1; #define int long long #define ll long long #define INTMAX INT_MAX #define INTMIN INT_MIN #define LONGMAX LLONG_MAX #define LONGMIN LLONG_MIN #define fi first #define se second #define memfull(a,b) memset(a,b,sizeof(a)); #define endl '\n' #define TASK "TEST" #define file() if (fopen(TASK".inp","r")){freopen(TASK".inp","r",stdin); freopen(TASK".out","w",stdout);} using namespace std; const int MOD=1e9+7; const int maxn=100005; const int LOG=16; int up[maxn][LOG+1],h[maxn]; vector<pair<int,int> > adj[maxn]; int n,m,k; int tin[maxn],tout[maxn],id_dfs=0,dp[maxn]; void dfs(int u,int p) { tin[u]=++id_dfs; for (auto v:adj[u]) { if (v.fi==p)continue; h[v.fi]=h[u]+1; up[v.fi][0]=u; for (int i=1;i<=LOG;i++)up[v.fi][i]=up[up[v.fi][i-1]][i-1]; dfs(v.fi,u); } tout[u]=id_dfs; } int lca(int u,int v) { if (h[u]<h[v])swap(u,v); for (int i=LOG;i>=0;i--)if (h[up[u][i]]>=h[v])u=up[u][i]; if (u==v)return u; for (int i=LOG;i>=0;i--) { if (up[u][i]!=up[v][i]) { u=up[u][i]; v=up[v][i]; } } return up[u][0]; } bool cmp(int x,int y) { return tin[x]<tin[y]; } bool is_acestor(int x,int y) { return tin[x]<=tin[y]&&tin[y]<=tout[x]; } int build_virtualtree(vector<int> &vers) { int N=vers.size(); sort(vers.begin(),vers.end(),cmp); for (int i=1;i<N;i++)vers.push_back(lca(vers[i],vers[i-1])); sort(vers.begin(),vers.end(),cmp); vers.erase(unique(vers.begin(),vers.end()),vers.end()); int root=vers[0]; stack<int> st; st.push(root); for (int i=1;i<vers.size();i++) { while(st.size()&&!is_acestor(st.top(),vers[i]))st.pop(); int u=st.top(); int v=vers[i]; dp[v]++; dp[u]--; st.push(v); } return root; } vector<int> ans; void dfs_cal(int u,int p) { for (auto v:adj[u]) { if (v.fi==p)continue; dfs_cal(v.fi,u); if (dp[v.fi]>=k)ans.push_back(v.se); dp[u]+=dp[v.fi]; } } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); file(); cin>>n>>m>>k; for (int i=1;i<n;i++) { int x,y; cin>>x>>y; adj[x].push_back({y,i}); adj[y].push_back({x,i}); } h[0]=-1; dfs(1,0); while(m--) { int k; cin>>k; vector<int> vers; for (int i=1;i<=k;i++) { int x; cin>>x; vers.push_back(x); } int root=build_virtualtree(vers); } dfs_cal(1,0); sort(ans.begin(),ans.end()); cout<<ans.size()<<endl; for (auto i:ans)cout<<i<<" "; bool M2; cerr<<"-------------------------------------------------"<<endl; cerr<<"Time : "<<clock()<<" ms"<<endl; cerr<<"Memory : "<<abs(&M2-&M1)/1024/1024<<" MB"<<endl; cerr<<"-------------------------------------------------"<<endl; return 0; }

Compilation message (stderr)

railway.cpp: In function 'int32_t main()':
railway.cpp:25:50: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 | #define file() if (fopen(TASK".inp","r")){freopen(TASK".inp","r",stdin); freopen(TASK".out","w",stdout);}
      |                                           ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
railway.cpp:107:5: note: in expansion of macro 'file'
  107 |     file();
      |     ^~~~
railway.cpp:25:81: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 | #define file() if (fopen(TASK".inp","r")){freopen(TASK".inp","r",stdin); freopen(TASK".out","w",stdout);}
      |                                                                          ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
railway.cpp:107:5: note: in expansion of macro 'file'
  107 |     file();
      |     ^~~~
#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...