$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 ;
}
随机推荐
- Python深入:01内存管理
在Python中,一切都是指针. 一:对象三特性 所有的Python对象都有三个特性:身份,类型和值. 身份:每一个对象都有一个唯一的身份标识,任何对象 ...
- @codechef - BIKE@ Chef and Bike
目录 @description@ @solution@ @accepted code@ @details@ @description@ 输入 n(n ≤ 22) 个点,m(m ≤ 8000) 个边.每 ...
- BLOB类型对应Long binary,CLOB对应Long characters
BLOB类型对应Long binary,CLOB对应Long characters
- Top 10 open source projects of 2015
Top 10 open source projects of 2015 Posted 15 Dec 2015Jen Wike Huger (Red Hat)Feed 188 up 31 comment ...
- HDU 1698 Just a Hook 线段树区间更新、
来谈谈自己对延迟标记(lazy标记)的理解吧. lazy标记的主要作用是尽可能的降低时间复杂度. 这样说吧. 如果你不用lazy标记,那么你对于一个区间更新的话是要对其所有的子区间都更新一次,但如果用 ...
- iptables [-j target/jump] 常用的处理动作
-j 参数用来指定要进行的处理动作,常用的处理动作包括:ACCEPT.REJECT.DROP.REDIRECT.MASQUERADE.LOG.DNAT.SNAT.MIRROR.QUEUE.RETURN ...
- 漏洞: RHSA-2017:3075: wget security update
该网址有解决方案 http://www.stumblingblock.cn/3102.html
- ios9.3.3 h5的js代码全部失效
做微信公众号页面时,ios9.3.3 h5的js代码全部失效描述: 机型iphone6 plus,ios9.3.3js代码全部失效,刚开始还以为是ios和jq兼容问题, 后来发现是es6语法不能读,导 ...
- JS 复制文本兼容移动端 iOS & android
有几个需要注意的地方. 首先文本只有选中才可以复制,所以简单的做法就是创建一个隐藏的 input,然后绑定需要复制的文本. 另外如果将 input 设置为 `type="hidden&quo ...
- Flex AIR Mobile应用性能解决方案
这个flex mobile开发,一般原生开发也许是最合适的方式,但是涉及到跨平台的问题,有精力的团队一般都会逐个基于移动操作系统进行开发.但是如果追求短小,精悍,快速,希望能够跨平台,基于html5 ...