$Noip2014/Luogu2296$ 寻找道路 图论
$Sol$
首先找出符合条件一的点然后跑$SPFA$就好了叭.
如何判断点是否符合条件一呢?先连反边,记录每个点的入度,然后从终点开始$dfs$,记录每个点被到达的次数,若到达的次数等于它的入度且不为$0$那么就是满足题意的.
为啥$Noip2014$有$4$道连我都觉得很水的题.
$Code$
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define yes(i,a,b) for(Rg int i=a;i>=b;--i)
#define e(i,u) for(Rg int i=b[u];i;i=a[i].nt)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2147483647
using namespace std;
il int read()
{
Rg int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
const int N=,M=;
int n,m,b[N],ct,du[N],s,t,vis[N],dis[N];
bool fl[N];
queue<int>q;
struct nd1{int u,v;}eg[M];
struct nd{int v,nt;}a[M];
il void add(int u,int v){a[++ct]=(nd){v,b[u]};b[u]=ct;}
il void dfs(int u)
{
e(i,u)
{
Rg int v=a[i].v;vis[v]++;
if(vis[v]>)continue;
dfs(v);
}
}
il void SPFA()
{
mem(vis,);mem(dis,);
vis[s]=;dis[s]=;q.push(s);
while(!q.empty())
{
Rg int u=q.front();q.pop();vis[u]=;
e(i,u)
{
Rg int v=a[i].v;
if(!fl[v])continue;
if(dis[v]>dis[u]+)
{
dis[v]=dis[u]+;
if(!vis[v]){vis[v]=;q.push(v);}
}
}
}
}
il bool cmp(nd1 x,nd1 y){return x.u==y.u?x.v<y.v:x.u<y.u;}
int main()
{
n=read(),m=read();
go(i,,m)
{
Rg int u=read(),v=read();
if(u==v)continue;
eg[i]=(nd1){u,v};//add(v,u);du[u]++;
}
sort(eg+,eg+m+,cmp);
Rg int nm=;
go(i,,m)
{
if(eg[i].u==eg[i-].u && eg[i].v==eg[i-].v){nm++;continue;}
add(eg[i].v,eg[i].u);du[eg[i].u]++;
}
m-=nm;
s=read(),t=read();swap(s,t);
vis[s]=;dfs(s);
go(i,,n)if((vis[i]==du[i]&&vis[i])||i==s)fl[i]=;
if(!fl[s]){printf("-1\n");return ;}
SPFA();
if(dis[t]>M)printf("-1\n");
else printf("%d\n",dis[t]);
return ;
}
随机推荐
- 《C语言深度解剖》学习笔记之关键字
第一章 关键字 C语言共有32个关键字. 关键字 auto 声明自动变量 int 声明整型变量 long 声明长整型变量 char 声明字符型变量 float 声明浮点型变量 short 声明短整 ...
- 2018-2-13-win10-uwp-如何让WebView标识win10手机
title author date CreateTime categories win10 uwp 如何让WebView标识win10手机 lindexi 2018-2-13 17:23:3 +080 ...
- @雅礼集训01/06 - T3@ math
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给出 n, m, x,你需要求出下列式子的值: \[\sum_{ ...
- php 位运算 3<<2;
- mysql数据库之多表查询
准备 ...
- mysql统计信息相关
最近RDS FOR MYSQL5.6的统计信息有问题,一些表明明的数据,但统计信息里去显示为空表,导致执行计划出错,查询效率很低,所以查看下相关的信息. -- 查看服务器系统变量,实际上使用的变量的值 ...
- poj 1092 Farmland (Geometry)
1092 -- Farmland 怎么最近做几何题都这么蛋疼,提交C++过不了交G++就过了.据我估计,原因是用了atan2这个函数,或者是其他一些函数造成了精度的影响.不管怎样,这题最后还是过了~ ...
- Google Colab使用教程
简介Google Colaboratory是谷歌开放的云服务平台,提供免费的CPU.GPU和TPU服务器. 目前深度学习在图像和文本上的应用越来越多,不断有新的模型.新的算法获得更好的效果,然而,一方 ...
- Python--day65--模板语言之tags
Tags for循环 普通for循环 <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% en ...
- (二)Centos7下Yum更新安装PHP5.5,5.6,7.0
yum源默认的版本太低了,手动安装有一些麻烦,想采用Yum更新安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包, ...