BZOJ—— 3402: [Usaco2009 Open]Hide and Seek 捉迷藏
2017-11-26 20:27
393 查看
http://www.lydsy.com/JudgeOnline/problem.php?id=3402
Description
贝茜在和约翰玩一个“捉迷藏”的游戏. 她正要找出所有适合她躲藏的安全牛棚.一共有N(2≤N≤20000)个牛棚,被编为1到N号.她知道约翰(捉牛者)从牛棚1出发.所有的牛棚由M(1≤M≤50000)条双向路连接,每条双向路连接两个不同的牛棚.所有的牛棚都是相通的.贝茜认为同牛棚1距离最远的的牛棚是安全的.两个牛棚间的距离是指,从一个牛棚到另一个牛棚最少需要通过的道路数量.请帮贝茜找出所有的安全牛棚.Input
第1行输入两个整数N和M,之后M行每行输入两个整数,表示一条路的两个端点.Output
仅一行,输出三个整数.第1个表示安全牛棚(如果有多个,输出编号最小的);第2个表示牛棚1和安全牛棚的距离;第3个表示有多少个安全的牛棚.
Sample Input
6 73 6
4 3
3 2
1 3
1 2
2 4
5 2
Sample Output
4 2 3HINT
Source
SPFA 对于一个到达过的点,更新他的最小值,没到达的更新当前值,
记录到达每个点的次数,最后找出最长距离判断判断就好了。
#include <cstring> #include <cstdio> #include <queue> inline void read(int &x) { x=0; register char ch=getchar(); for(; ch>'9'||ch<'0'; ) ch=getchar(); for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0'; } const int M(50005); const int N(20005); int n,m,head ,sumedge; int _v[M<<1],_nex[M<<1]; inline void ins(int u,int v) { _v[++sumedge]=v,_nex[sumedge]=head[u];head[u]=sumedge; _v[++sumedge]=u,_nex[sumedge]=head[v];head[v]=sumedge; } bool inq ; int dis ,cnt ,id[M]; inline void SPFA(int s) { for(int i=1; i<=n; ++i) dis[i]=-1; std:: queue<int>que; dis[s]=0; que.push(s); for(int u,v; !que.empty(); ) { u=que.front(); que.pop(); inq[u]=0; for(int i=head[u]; i; i=_nex[i]) { if(dis[_v[i]]==-1) { cnt[_v[i]]++; dis[_v[i]]=dis[u]+1; if(!inq[_v[i]]) { que.push(_v[i]); inq[_v[i]]=true; } } else if(dis[_v[i]]>dis[u]+1) { cnt[_v[i]]++; dis[_v[i]]=dis[u]+1; if(!inq[_v[i]]) { que.push(_v[i]); inq[_v[i]]=true; } } } } } int Presist() { read(n),read(m); for(int u,v; m--; ) read(u),read(v),ins(u,v); SPFA(1); int now=-1,pos,num; for(int i=1; i<=n; ++i) if(dis[i]>now) now=dis[i],pos=i,num=cnt[i]; printf("%d %d ",pos,now); num=0; for(int i=1; i<=n; ++i) num+=(dis[i]==now); printf("%d\n",num); return 0; } int Aptal=Presist(); int main(int argc,char**argv){;}
相关文章推荐
- BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏(最短路)
- BZOJ3402: [Usaco2009 Open]Hide and Seek 捉迷藏
- BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏 最短路
- bzoj 3402: [Usaco2009 Open]Hide and Seek 捉迷藏
- 【BZOJ】3402: [Usaco2009 Open]Hide and Seek 捉迷藏(spfa)
- 3402: [Usaco2009 Open]Hide and Seek 捉迷藏
- 3402: [Usaco2009 Open]Hide and Seek 捉迷藏 最短路
- 3402: [Usaco2009 Open]Hide and Seek 捉迷藏 (dijkstra+heap)
- bzoj3402 [Usaco2009 Open]Hide and Seek 捉迷藏
- bzoj3402 [Usaco2009 Open]Hide and Seek 捉迷藏
- BZOJ3402: [Usaco2009 Open]Hide and Seek 捉迷藏
- 【K-D树 求最近最远距离】BZOJ 1941 [Sdoi2010]Hide and Seek
- bzoj 3403: [Usaco2009 Open]Cow Line 直线上的牛
- bzoj 3405: [Usaco2009 Open]Grazing2 移动牛棚(DP)
- bzoj 1941: [Sdoi2010]Hide and Seek (KD-tree)
- [bzoj1941][Sdoi2010]Hide and Seek_KD-Tree
- [bzoj1941][kd-tree]Hide and Seek
- bzoj3403[Usaco2009 Open]Cow Line 直线上的牛
- bzoj 1571 [Usaco2009 Open]滑雪课Ski
- BZOJ 1572: [Usaco2009 Open]工作安排Job( 贪心 )