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
  • 相关阅读:
    贪心算法
    机器视觉算法与应用读书笔记(算法)
    多层感知机面临的问题
    反向传播
    卷积后的输出尺寸
    TensorFlow入门
    MyBatis-使用XML或注解的简单实例
    在web.xml中配置SpringMVC
    深入理解Class类和Object类
    MySQL索引
  • 原文地址:https://www.cnblogs.com/ainixu1314/p/3432198.html
Copyright © 2011-2022 走看看