seo关键词优化,西安长安区网站优化地址,wordpress新闻站自动采集器,qq是哪个公司开发的地址正题 题目大意
一棵树一个人从sss开始#xff0c;有两个追击者从p,qp,qp,q出发#xff0c; 在3k1s3k1\ s3k1 s#xff0c;那个人走 在3k2和3k3s3k2和3k3\ s3k2和3k3 s#xff0c;追击者走。
求那个人最久多久不会被追上。 解题思路
首先计算出每个点距离两个追击者和那个…正题 题目大意
一棵树一个人从sss开始有两个追击者从p,qp,qp,q出发 在3k1s3k1\ s3k1 s那个人走 在3k2和3k3s3k2和3k3\ s3k2和3k3 s追击者走。
求那个人最久多久不会被追上。 解题思路
首先计算出每个点距离两个追击者和那个人的距离。
然后从那个人的位置出发开始dfsdfsdfs最终被追上的位置(注意可以在一个地方等待追击者)
然后对一个点若这个点追击者比他更早到达那么就不能走不然就统计答案后继续走。
OverOverOver codecodecode
#includecstdio
#includealgorithm
#includecstring
using namespace std;
const int N201000;
struct node{int to,next;
}a[N*2];
int n,s,q,p,dis[3][N],ls[N],ans,tot;
void addl(int x,int y)
{a[tot].toy;a[tot].nextls[x];ls[x]tot;
}
void count_dis(int x,int fa,int id)
{for(int ils[x];i;ia[i].next){int ya[i].to;if(yfa)continue;dis[id][y]dis[id][x]1;count_dis(y,x,id);}
}
void dfs(int x,int fa)
{if(dis[0][x]*2min(dis[1][x],dis[2][x]))return;int lenmin(dis[1][x],dis[2][x]);ansmax(ans,(len-1)/2*33-len%2);for(int ils[x];i;ia[i].next){int ya[i].to;if(yfa) continue;dfs(y,x);}
}
int main()
{//freopen(track.in,r,stdin);//freopen(track.out,w,stdout);scanf(%d%d%d%d,n,s,q,p);for(int i1;in;i){int x,y;scanf(%d%d,x,y);addl(x,y);addl(y,x);}count_dis(s,s,0);count_dis(q,q,1);count_dis(p,p,2);dfs(s,s);printf(%d,ans);
}