zoukankan      html  css  js  c++  java
  • BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏

    题目

    3402: [Usaco2009 Open]Hide and Seek 捉迷藏

    Time Limit: 3 Sec  Memory Limit: 128 MB

    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 7
    3 6
    4 3
    3 2
    1 3
    1 2
    2 4
    5 2

    Sample Output

    4 2 3

    HINT

     

    Source

    题解

    呃,这一题嘛。。就是一个SPFA嘛!我数组开小了,怒献一次WA!

    代码

     1 /*Author:WNJXYK*/
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<queue>
     5 using namespace std;
     6 
     7 int n,m;
     8 
     9 struct Edge{
    10     int v;
    11     int t;
    12     int nxt;
    13     Edge(){}
    14     Edge(int a,int b,int c){
    15         v=a;t=b;nxt=c;
    16     }
    17 };
    18 Edge e[100010];
    19 int nume;
    20 int head[20010];
    21 inline void addSingleEdge(int x,int y,int w){
    22     e[++nume]=Edge(y,w,head[x]);
    23     head[x]=nume;
    24 }
    25 inline void addEdge(int x,int y,int w){
    26     addSingleEdge(x,y,w);
    27     addSingleEdge(y,x,w);
    28 }
    29 
    30 queue<int> que;
    31 double dist[20010];
    32 bool inque[20010];
    33 
    34 inline void spfa(int src){
    35     bool isPrint=false;
    36     while(!que.empty()) que.pop();
    37     memset(dist,127,sizeof(dist));
    38     memset(inque,false,sizeof(inque));
    39     que.push(src);
    40     dist[src]=0;
    41     inque[src]=true;
    42     while(!que.empty()){
    43         int now=que.front();
    44         que.pop();
    45         for (int i=head[now];i;i=e[i].nxt){
    46             int v=e[i].v;int w=e[i].t;
    47             if (dist[v]>dist[now]+w){
    48                 dist[v]=dist[now]+w;
    49                 if (!inque[v]){
    50                     inque[v]=true;
    51                     que.push(v);
    52                 }
    53             }
    54         }
    55     }
    56 }
    57 
    58 int main(){
    59     scanf("%d%d",&n,&m);
    60     for (int i=1;i<=m;i++){
    61         int x,y;
    62         scanf("%d%d",&x,&y);
    63         addEdge(x,y,1);
    64     }
    65     spfa(1);
    66     int maxDist=0,minId=1,maxNum=1;
    67     for (int i=2;i<=n;i++){
    68         if (maxDist<dist[i]){
    69             maxDist=dist[i];
    70             minId=i;
    71             maxNum=1;
    72         }else if (maxDist==dist[i])maxNum++;
    73     }
    74     printf("%d %d %d
    ",minId,maxDist,maxNum);
    75     return 0;
    76 }
    View Code
  • 相关阅读:
    爬虫基础 2.1 http原理
    爬虫基础 2.1 http原理
    3.29上午
    3.28
    3.27下午
    3.27上午
    3.24上午
    3.23下午
    3.23上午
    3.22上午
  • 原文地址:https://www.cnblogs.com/WNJXYK/p/4074897.html
Copyright © 2011-2022 走看看