zoukankan      html  css  js  c++  java
  • USACO 2009 Open Silver 1.Hide and Seek 最短路水题

    洛谷:https://www.luogu.com.cn/problem/P2951

    最短路水题,基本上是一道裸题

    跑一遍最短路,再遍历求出最大值、个数、最小编号即可。

    注意:无向图边的数组要开成二倍!!!!

    代码如下:

    #include<stdio.h>
    #include<queue>
    #include<cstring>
    using namespace std;
    #define P 20001
    #define C 100001
    int head[P],v[C],to[C],nxt[C];
    int dis[P];
    bool inQ[P];
    int num[P];
    queue<int>q;
    int tot=0;
    void spfa(int s)
    {
    	memset(dis,0x3f3f,sizeof(dis));
    	dis[s]=0;
    	q.push(s);
    	inQ[s]=1;
    	while(!q.empty())
    	{
    		int p=q.front();
    		q.pop();
    		inQ[p]=0;
    		for(int i=head[p];i;i=nxt[i])
    		{
    			int y=to[i];
    			if(dis[y]>dis[p]+v[i])
    			{
    				dis[y]=dis[p]+v[i];
    				if(inQ[y]==0)
    				q.push(y),inQ[y]=1;
    			}
    		}
    	}
    }
    void add(int x,int y,int z)
    {
    	v[++tot]=z;
    	to[tot]=y;
    	nxt[tot]=head[x];
    	head[x]=tot;	
    }
    int main()
    {
    	int n,m;
    	scanf("%d%d",&n,&m);
    	int x,y,z;
    	for(int i=1;i<=m;i++)
    	{
    		scanf("%d%d",&x,&y);
    		add(x,y,1);
    		add(y,x,1);
    	}
    	spfa(1);
    	int ans=0;
    	for(int i=1;i<=n;i++)
    	{
    		ans=max(ans,dis[i]);
    	}
    	int num=0;
    	int flag=0;
    	int cn;
    	for(int i=1;i<=n;i++)
    	{
    		if(dis[i]==ans)
    		num++;
    		if(flag==0&&dis[i]==ans)
    		flag=1,cn=i;	
    	}
    	printf("%d %d %d",cn,ans,num);
    }
    

      

  • 相关阅读:
    __weak与__block修饰符区别
    Socket 记录
    Python yaml文件中文读取写入
    Xshell 连接 本地虚拟机
    MySQL查询学生表
    Python Excel读写操作
    pytest mark标记运行
    pytest 参数化
    pytest xfail参数详解
    pytest 失败截图
  • 原文地址:https://www.cnblogs.com/Marcelo/p/13444452.html
Copyright © 2011-2022 走看看