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
  • 相关阅读:
    ASCII码表以及不同进制间的O(1)转换
    四则运算表达式的语法分析
    语法分析器初步学习——LISP语法分析
    ASC与HEX之间的转换
    字节存储数据
    进制之间的转换
    java多线程CountDownLatch
    java反射机制
    java注解
    使用javafx实现视频播放器
  • 原文地址:https://www.cnblogs.com/ainixu1314/p/3432198.html
Copyright © 2011-2022 走看看