CF796D Police Stations BFS+染色
Posted guangheli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF796D Police Stations BFS+染色相关的知识,希望对你有一定的参考价值。
类似贪心,用 BFS 对树进行染色,然后枚举哪些边的两个端点颜色不同.
code:
#include <bits/stdc++.h> #define N 300006 #define setIO(s) freopen(s".in","r",stdin) using namespace std; vector<int>G; queue<int>q; int n,k,d,edges,vis[N],hd[N],to[N<<1],nex[N<<1],U[N],V[N],dis[N]; void add(int u,int v) nex[++edges]=hd[u],hd[u]=edges,to[edges]=v; int main() int i,j; // setIO("input"); scanf("%d%d%d",&n,&k,&d); for(i=1;i<=k;++i) int x; scanf("%d",&x); vis[x]=x,q.push(x); for(i=1;i<n;++i) int u,v; scanf("%d%d",&u,&v), add(u,v),add(v,u); U[i]=u, V[i]=v; for(;!q.empty();) int u=q.front();q.pop(); for(int i=hd[u];i;i=nex[i]) int v=to[i]; if(!vis[v] && dis[u]+1<=d) vis[v]=vis[u]; dis[v]=dis[u]+1; q.push(v); for(i=1;i<n;++i) if(vis[U[i]]!=vis[V[i]]) G.push_back(i); printf("%d\n",G.size()); for(i=0;i<G.size();++i) printf("%d ",G[i]); return 0;
以上是关于CF796D Police Stations BFS+染色的主要内容,如果未能解决你的问题,请参考以下文章