niop 2014寻找道路
2016-04-21 21:31
393 查看
/* 乍一看就是个最短路 SFPA 但是要保证路径上的所有点的出边所指向的点都直接或间接与终点连通。 这一点就蛋疼了0.0 开始想的是正着跑一边 每一个点的所有边都能符合条件 那这个点就符合条件0.0 可惜WA +RE 了 后来xyd大神说 可以先到这从终点跑一边 能到的标记 然后在枚举每个点的所有边指向的点 全被标记那么这个点就ok 最后SPFA 注意 正反建边 数组要大!!!!!!!! 还有 从终点跑一边 能到的标记时Dfs会TLE 所以0.0 BFs了 */ #include<iostream> #include<cstdio> #include<cstring> #include<queue> #define maxn 10010 #define maxx 400010 using namespace std; queue<int>q; int n,m,head1[maxx],head2[maxx],num,s,t,f[maxn],ans[maxn],cn1[maxn],cn2[maxn]; struct node { int v,dis,pre; }e1[maxx],e2[maxx]; /*int Dfs(int p) { f[p]=1; for(int i=head2[p];i;i=e2[i].pre) { cn1[e2[i].v]=1; if(f[e2[i].v]==0) Dfs(e2[i].v); } }*/ void Bfs(int p) { q.push(p); f[p]=1; int i; while(!q.empty()) { int k=q.front(); q.pop(); for(i=head2[k];i;i=e2[i].pre) { cn1[e2[i].v]=1; if(f[e2[i].v]==0) { q.push(e2[i].v); f[e2[i].v]=1; } } } } void Biu() { int i,j; for(i=1;i<=n;i++) { int g=0; for(j=head1[i];j;j=e1[j].pre) if(cn1[e1[j].v]==0) g=1; if(g==0) cn2[i]=1; } } int main() { scanf("%d%d",&n,&m); int i,x,y; memset(ans,127,sizeof(ans)); for(i=1;i<=m;i++) { scanf("%d%d",&x,&y); num++; e1[num].v=y; e1[num].dis=1; e1[num].pre=head1[x]; head1[x]=num; num++; e2[num].v=x; e2[num].dis=1; e2[num].pre=head2[y]; head2[y]=num; } scanf("%d%d",&s,&t); Bfs(t); cn1[t]=1; Biu(); memset(f,0,sizeof(f)); q.push(s); ans[s]=0; f[s]=1; while(!q.empty()) { int k=q.front(); q.pop(); f[k]=0; for(i=head1[k];i;i=e1[i].pre) if(ans[e1[i].v]>ans[k]+e1[i].dis&&cn2[k]==1) { ans[e1[i].v]=ans[k]+e1[i].dis; if(f[e1[i].v]==0) { q.push(e1[i].v); f[e1[i].v]=1; } } } if(ans[t]<0x7fffffff)printf("%d",ans[t]); else printf("-1"); return 0; }
相关文章推荐
- 架构4部分
- 如何写出专业级OOP程序-----文档注释
- linux下lvm逻辑卷和快照的命令详解
- linux 守护进程
- linux 统计文件的个数
- 查看手机,平板的Iafw
- Linux内核分析:Linux内核学习总结
- shell中变量的空格替换
- Windows代码在linux中运行的注意事项
- Linux:sk_buff完全剖析与理解【转】
- flume-ng性能优化与架构设计
- 自己学Docker:3.安装Docker之后可以先做什么
- Shell中整数比较
- 关于adb install和uninstall
- 通过adb从手机中导出安装包或导入
- idea+tomcat+web项目 中tomcat的部署和运行
- centos_security.txt - 2016-04-19 23:00
- LeetCode *** 207. Course Schedule (Topological Sort )
- 搭建(win7)eclipse远程操作(Linux上)hadoop2.6.0_出错集
- OpenCV3.1编译