• POJ 1847


    题意 N个点 求a->b用的开关最少的次数
    思路 把每个点到的第一个点的值记为0 其他为1 跑一下就行

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<string.h>
    #include<queue>
    using namespace std;
    const int maxn=1e3+3;
    const int inf=0x3f3f3f3f;
    
    struct node{
    	int v,w,next;
    }mp[maxn];
    int k=0;
    int n,a,b,x,s;
    int dis[maxn],vis[maxn];
    int head[maxn];
    
    void add(int u,int v,int w)
    {
    	mp[k].v=v;
    	mp[k].w=w;
    	mp[k].next=head[u];
    	head[u]=k++;
    }
    
    void spfa(int x)
    {
    	memset(vis,0,sizeof(vis));
    	memset(dis,inf,sizeof(dis));
    	queue<int > q;
    	vis[x]=1;
    	dis[x]=0;
    	q.push(x);
    	while(!q.empty())	
    	{
    		int u=q.front();
    		q.pop();
    		vis[u]=0;
    		for(int i=head[u];i!=-1;i=mp[i].next)
    		{
    			int v=mp[i].v;
    			int w=mp[i].w;
    			if(dis[v]>dis[u]+w)
    			{
    				dis[v]=dis[u]+w;
    				if(!vis[v])
    				{
    					vis[v]=1;
    					q.push(v);
    				}
    			}
    		}
    	}
    }
    
    int main()
    {
    	cin>>n>>a>>b;
    	memset(head,-1,sizeof(head));
    	for(int i=1;i<=n;i++)
    	{
    		cin>>s;
    		if(!s) continue;
    		s--;
    		cin>>x;
    		add(i,x,0); 
    		while(s--)
    		{
    			cin>>x;
    			add(i,x,1);
    		}
    	}
    	spfa(a);
    	if(dis[b]!=inf)
    		cout<<dis[b]<<endl;
    	else cout<<"-1"<<endl;
    	return 0;
    }
    
  • 相关阅读:
    TCP首部
    IP
    ARP
    QYT教主TCPIP2017 TCP部分 视频笔记
    卷一第二十二章:UDP原理
    卷一第二十一章:TCP原理
    卷一第二十章:IPV6基础
    卷一十九章:DHCP (不涉及工作,暂停)
    目录
    Educational Codeforces Round 90 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/tianming1/p/13893129.html
Copyright © 2020-2023  润新知