寻找道路
来源:互联网 发布:知在古文中的意思 编辑:程序博客网 时间:2024/05/01 10:14
因为这个题是有向图,所以联通的条件是,正反都能跑,所以反着跑一边bfs,把没跑到的打上标记,然后正着跑spfa
因为第一次我去了好几层。wa了
#include<cstdio>#include<queue>#include<cstring>using namespace std;queue<int>q;const int M=21000,N=410000,INF=2139062143;int vis[M],head[M],nex[N],to[N],tot,dis[M],f[M],x[N],y[N];void add(int x,int y){ nex[++tot]=head[x]; to[tot]=y; head[x]=tot;}int n,s,t,m;void bfs(){ q.push(t);vis[t]=1; while(!q.empty()){ int x=q.front();q.pop(); for(int i=head[x];i;i=nex[i]){ int tmp=to[i]; if(!vis[tmp]) vis[tmp]=1,q.push(tmp); } }}queue<int> que;void spfa(){ que.push(s);f[s]=1; memset(dis,127,sizeof dis); dis[s]=0; while(!que.empty()){ int x=que.front();que.pop();f[x]=0; for(int i=head[x];i;i=nex[i]){ int tmp=to[i]; if(!vis[tmp]&&!f[tmp]) continue; if(dis[tmp]>dis[x]+1){ dis[tmp]=dis[x]+1; if(!f[tmp]) f[tmp]=1,que.push(tmp); } } }}int main() { //freopen("road.in","r",stdin); //freopen("road.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d",&x[i],&y[i]); add(y[i],x[i]); } scanf("%d%d",&s,&t); bfs(); for(int i=1;i<=m;i++){ if(!vis[y[i]])f[x[i]]=1; } memset(head,0,sizeof head); memset(nex,0,sizeof nex); memset(to,0,sizeof to); tot=0; for(int i=1;i<=m;i++){ add(x[i],y[i]); } spfa(); if(dis[t]!=INF) printf("%d ",dis[t]); else printf("-1");}
阅读全文
1 0
- 寻找道路
- 寻找道路
- 寻找道路
- 寻找不同的道路
- Noip2014寻找道路题解
- NOIP2014 寻找道路
- [NOIP2014]寻找道路
- Vijos1909 寻找道路
- NOIP2014寻找道路
- codevs 寻找道路
- vijos1909【noip2014】寻找道路
- 【noip2014】寻找道路
- NOIP2014 寻找道路
- noip2014寻找道路
- CODEVS 3731 寻找道路
- 【NOIP2014】D2T2 寻找道路
- 【noip2014】tyvj4058 寻找道路
- NOIP 2014 寻找道路
- Ubuntu不能添加PPA源
- “技术崇拜”与“技术恐惧”都会阻碍 AI 创新,“技术节制”才是正道
- 计算奖金
- [bzoj3555][Ctsc2014]企鹅QQ(hash)
- 百度地图SDK安卓开发
- 寻找道路
- 税费计算
- 天数判断
- MXNet如何生成.lst文件和.rec文件
- [BZOJ]2707: [SDOI2012]走迷宫 期望+高斯消元
- ImageLoader(多线程异步加载和显示图片)
- tesseract源码解读0
- python:9:os模块与sys.argv
- 找7