zoukankan      html  css  js  c++  java
  • sicily 9360 vector

    9360. HIPERCIJEVI
     
     
    Total: 104 Accepted: 21 Rating:
    Unrated
     
     
         
         
     
    Time Limit: 4sec    Memory Limit:256MB
    Description

    In a galaxy far, far away, the fastest method of transportation is using hypertubes. Each hypertube 

    directly connects K stations with each other. What is the minimum number of stations that we need to 

    pass through in order to get from station 1 to station N? 

    Input

    The first line of input contains three positive integers: N (1 ≤ ≤ 100 000), the number of stations, K 

    (1 ≤ ≤ 1 000), the number of stations that any single hypertube directly interconnects, and M (1 ≤  ≤ 1 000), the number of hypertubes. 

    Each of the following M lines contains the description of a single hypertube: K positive integers, the 

    labels of stations connected to that hypertube. 

    Output

    The first and only line of output must contain the required minimum number of stations. If it isn't 

    possible to travel from station 1 to station N, output -1. 

    Sample Input
    Copy sample input to clipboard
    input 1:
    9 3 5 
    1 2 3 
    1 4 5 
    3 6 7 
    5 6 7 
    6 8 9
    
    input 2:
    15 8 4 
    11 12 8 14 13 6 10 7 
    1 5 8 12 13 6 2 4 
    10 15 4 5 9 8 14 12 
    11 12 14 3 5 6 1 13 
    Sample Output
    output 1:
    4
    
    output 2:
    3
    #include <iostream>
    #include <cstring>
    #include <queue>
    #include <vector>
    #include<cstdio>
    using namespace std;
    #define maxn 100005
    vector <int>p[maxn+1000];
    int dis[maxn+1000];
    queue <int>q;
    int n,k,m;
    int main()
    {
        int i,j;
        while(cin>>n>>k>>m)
        {
            for(i=1; i<=n+m; i++)
                p[i].clear();
            for(i=1; i<=m; i++)
                for(j=1; j<=k; j++)
                {
                    int a;
                    scanf("%d",&a);
                    p[i+n].push_back(a);
                    p[a].push_back(i+n);
                }
            memset(dis,-1,sizeof(dis));
            dis[1]=0;
            while(!q.empty())
            q.pop();
            q.push(1);
            int ans=-1;
            while(!q.empty())
            {
                int tmp=q.front();
                q.pop();
                for(i=0;i<p[tmp].size();i++)
                    if(dis[p[tmp][i]]==-1)
                {
                    dis[p[tmp][i]]=dis[tmp]+1;
                    if(p[tmp][i]==n)
                        ans=dis[p[tmp][i]]/2+1;
                    q.push(p[tmp][i]);
                }
                if(ans!=-1)
                    break;
            }
            cout<<ans<<endl;
        }
    }    
    View Code
  • 相关阅读:
    局域网中配置多台机器可以登录远程桌面
    集合类接口IEnumerable,IEnumerator,ICollection,IList,IDictionary理解
    C#只允许运行应用程序的一个实例的正确写法
    windows快捷启动命令
    .Net中的Attribute
    NAnt学习笔记(1) NAnt的配置文件结构和一个简单的NAnt例子
    互联网项目管理要点(转)
    .net中的对象序列化(2):三种序列化方式
    NAnt学习笔记(2) 节点的含义解释
    如何在修改checkbox状态,不触发事件
  • 原文地址:https://www.cnblogs.com/ainixu1314/p/3432198.html
Copyright © 2011-2022 走看看