洛谷 [P2296] 寻找道路
来源:互联网 发布:linux下svn 钩子函数 编辑:程序博客网 时间:2024/05/01 16:22
反向BFS预处理,求出所有符合题意的点,再正向BFS,(注意对于边权恒为一的点,BFS,比SPFA高效)
输入时n与m分清
#include <iostream>#include <cstdio>#include <algorithm>#include <cstdlib>#include <queue>#include <cstring>using namespace std;const int MAXN=10005,MAXM=2000005;int read(){ int rv=0,fh=1; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-') fh=-1; c=getchar(); } while(c>='0'&&c<='9'){ rv=(rv<<1)+(rv<<3)+c-'0'; c=getchar(); } return fh*rv;}int head[MAXN],rhead[MAXN],n,m,s,t,nume,rnume,tot=-1,path[MAXN];bool f[MAXN],use[MAXN];struct edge{ int to,nxt;}e[MAXM],re[MAXM];void adde(int from,int to){ e[++nume].to=to; e[nume].nxt=head[from]; head[from]=nume;}void radde(int from,int to){ re[++rnume].to=to; re[rnume].nxt=rhead[from]; rhead[from]=rnume;}void bfs(){ queue <int> q; q.push(t); f[t]=1; while(!q.empty()){ int u=q.front(); q.pop(); for(int i=rhead[u];i;i=re[i].nxt){ int v=re[i].to; if(!f[v]){ f[v]=1; q.push(v); } } } }/*void dfs(int u){ f[u]=1; for(int i=rhead[u];i;i=re[i].nxt){ int v=re[i].to; if(!f[v]){ dfs(v); } }}*/void bfs2(){ queue <int> q; q.push(s); f[s]=1; while(!q.empty()){ int u=q.front(); q.pop(); for(int i=head[u];i;i=e[i].nxt){ int v=e[i].to; if(!f[v]&&!use[v]){ f[v]=1; q.push(v); path[v]=path[u]+1; if(v==t){ tot=path[v]; return; } } } }}int main(){// freopen("in.txt","r",stdin); n=read();m=read(); for(int i=1;i<=m;i++){ int u=read(),v=read(); //cout<<u<<" "<<v<<endl; adde(u,v);radde(v,u); } s=read();t=read(); bfs(); for(int i=1;i<=n;i++){ if(!f[i]){ //use[i]=1; for(int j=rhead[i];j;j=re[j].nxt){ use[re[j].to]=1; } } } //for(int i=1;i<=n;i++) if(!f[i]) printf("%d ",i); memset(f,0,sizeof(f)); //for(int i=1;i<=n;i++) printf("%d ",f[i]); bfs2(); cout<<tot;// fclose(stdin); return 0;}
P2296
阅读全文
0 0
- 【洛谷P2296】寻找道路
- 洛谷 P2296 寻找道路
- 洛谷 P2296 寻找道路
- 洛谷 P2296 寻找道路
- 洛谷 P2296 寻找道路
- 洛谷P2296 寻找道路
- 洛谷 P2296 寻找道路
- 洛谷 P2296 寻找道路
- 洛谷 [P2296] 寻找道路
- NOIP2014 day2 T2 洛谷P2296 寻找道路
- 洛谷 P2296 [NOIP2014 D2T2] 寻找道路
- |洛谷|搜索|NOIP2014|P2296 寻找道路
- 洛谷P2296 寻找道路(spfa)
- 洛谷P2296 寻找道路(NOIp2014)
- P2296 寻找道路
- Luogu P2296 [NOIP2014]寻找道路
- 最短路——洛谷P2296 寻找道路
- 洛谷P2296
- [BZOJ]5001: 搞事情 高斯消元解xor方程组
- 实心菱形
- 创建类ff和对象
- HDU-1000-A + B Problem
- Android 中编译ffmpeg
- 洛谷 [P2296] 寻找道路
- 虚拟机下模拟内网APP欺骗(小白)
- 安卓activity生存周期的onCreate、onRestoreInstanceState、onRestart、onStart、onResume、onPause、onStop、onDestroy
- 一类关于括号匹配的问题 区间dp
- python-028
- UVa11800
- Linux 变量的介绍和创建 —— env,set,export 命令
- knockout 数组的处理
- Test 2017.10.11