zoukankan      html  css  js  c++  java
  • 洛谷 P2296 寻找道路【bfs+spfa】

    反向建边bfs出不能到t的点,然后对每个能到这些点的点打上del标记,然后spfa的时候不经过这些点即可

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<vector>
    using namespace std;
    const int N=200005;
    int n,m,h[N],cnt,s,t,dis[N];
    bool v[N],f[N],d[N];
    vector<int>a[N];
    struct qwe
    {
    	int ne,to;
    }e[N];
    int read()
    {
    	int r=0,f=1;
    	char p=getchar();
    	while(p>'9'||p<'0')
    	{
    		if(p=='-')
    			f=-1;
    		p=getchar();
    	}
    	while(p>='0'&&p<='9')
    	{
    		r=r*10+p-48;
    		p=getchar();
    	}
    	return r*f;
    }
    void add(int u,int v)
    {
    	cnt++;
    	e[cnt].ne=h[u];
    	e[cnt].to=v;
    	h[u]=cnt;
    }
    int main()
    {
    	n=read(),m=read();
    	for(int i=1;i<=m;i++)
    	{
    		int x=read(),y=read();
    		if(x!=y)
    			add(x,y),a[y].push_back(x);
    	}
    	s=read(),t=read();
    	queue<int>q;
    	f[t]=1;
    	q.push(t);
    	while(!q.empty())
    	{
    		int u=q.front();
    		q.pop();
    		for(int i=0;i<a[u].size();i++)
    			if(!f[a[u][i]])
    			{
    				f[a[u][i]]=1;
    				q.push(a[u][i]);
    			}
    	}
    	for(int u=1;u<=n;u++)
    		for(int i=h[u];i;i=e[i].ne)
    			if(!f[e[i].to])
    			{
    				d[u]=1;
    				break;
    			}
    	for(int i=1;i<=n;i++)
    		dis[i]=1e9;
    	v[s]=1,dis[s]=0;
    	q.push(s);
    	while(!q.empty())
    	{
    		int u=q.front();
    		q.pop();
    		v[u]=0;
    		for(int i=h[u];i;i=e[i].ne)
    			if(!d[e[i].to]&&dis[e[i].to]>dis[u]+1)
    			{
    				dis[e[i].to]=dis[u]+1;
    				if(!v[e[i].to])
    				{
    					v[e[i].to]=1;
    					q.push(e[i].to);
    				}
    			}
    	}
    	printf("%d
    ",dis[t]==1e9?-1:dis[t]);
    	return 0;
    }
    
  • 相关阅读:
    swift 资料
    CI cookie 存放数组
    CI框架中 日志输出方法log_message()只允许输出字符串解决方案
    CI框架整合微信公共平台接口
    php中的 file_get_contents(‘php://input’)
    CI 框架购物车问题
    JQ 报表插件 jquery.jqplot 使用
    微信开发调试工具
    常用开源库
    字符集更改步骤,mysql乱码
  • 原文地址:https://www.cnblogs.com/lokiii/p/9737293.html
Copyright © 2011-2022 走看看