code3731 寻找道路
将图反向,从终点spfa,把和终点没有联系的点找出来,
把它们和它们所连接的所有点删去(反向图)
然后再一遍spfa,输出最短路即可
代码:
#include<iostream>
#include<cstring>
#include<queue>
#define MAXM 200005
#define MAXN 10005
#define INF 0x3f3f3f3f
using namespace std; int n,m;
struct edge{
int to,next,w;
}eg[MAXM];
int head[MAXN];
int cnt=;
int s,t;
int dist[MAXN];
bool canUse[MAXN];
bool vis[MAXN]; void add(int a,int b,int w){
cnt++;
eg[cnt].to=b;
eg[cnt].next=head[a];
eg[cnt].w=w;
head[a]=cnt;
} void spfa(int st){
memset(dist,0x7f,sizeof(dist));
memset(vis,false,sizeof(vis)); queue<int> q;
if(canUse[st]){
q.push(st);
dist[st]=;
vis[st]=true;
} while(!q.empty()){
int k=q.front(); q.pop();
vis[k]=false;
for(int i=head[k];i!=-;i=eg[i].next){
int u=eg[i].to;
if(canUse[u]){
if(dist[u]>dist[k]+eg[i].w){
dist[u]=dist[k]+eg[i].w;
if(!vis[u]){
vis[u]=true;
q.push(u);
}
}
}
}
}
} int main(){
memset(canUse,true,sizeof(canUse));
memset(head,-,sizeof(head)); cin>>n>>m;
int a,b,w;
for(int i=;i<=m;i++){
cin>>a>>b;
add(b,a,);
}
cin>>s>>t;
spfa(t);
for(int i=;i<=n;i++){
if(dist[i]>=INF){
//cout<<"Can't Use:"<<i<<endl;
canUse[i]=false;
for(int j=head[i];j!=-;j=eg[j].next){
canUse[eg[j].to]=false;
}
}
}
spfa(t);
if(dist[s]>=INF)cout<<-<<endl;
else cout<<dist[s]<<endl;
return ;
}
code3731 寻找道路的更多相关文章
- NOIP2014 寻找道路
2.寻找道路 (road.cpp/c/pas) [问题描述] 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指 ...
- Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组
3731 寻找道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找 ...
- 洛谷P2296 寻找道路 [拓扑排序,最短路]
题目传送门 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- 【DFS】【图论】NOIP2014寻找道路
[NOIP2014]寻找道路 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所 ...
- 【洛谷P2296】[NOIP2014]寻找道路
寻找道路 题目链接 这道题非常的水,按照题意, 先反向建边,从终点搜索,标记出可以到达终点的点 然后枚举一遍,判断出符合条件1的点 再从起点搜索一遍就可以了 #include<iostream& ...
- 洛谷P2296 寻找道路==codevs3731 寻找道路
P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- noip寻找道路
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- 洛谷——P2296 寻找道路
P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- luogu 2296 寻找道路 (搜索)
luogu 2296 寻找道路 题目链接:https://www.luogu.org/problemnew/show/P2296 从终点bfs或者dfs,找出所有终点能到达的点. 然后再从1到n看一下 ...
随机推荐
- python在文件中输入整数
a=[] b=[] for i in range(len(predicted)): b.append((int)(float(predicted[i]))) a.append(int(test_set ...
- AbstractQueuedSynchronizer原理分析
AbstractQueuedSynchronized 以下简称AQS,是用来构建锁或者其他同步组件的基础框架. 在AQS中,为锁的获取和释放提供了一些模板方法,而实现锁的类(AQS的子类)需要实现这些 ...
- Django-MTV模型
MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑,并在适当的时候 ...
- Go - 指针简介 与 ++/--运算符以及控制语句
指针 Go 语言中,对于指针有一些特殊约束: 1. 不在支持 “->” 符号,所有的指针使用“.” 来操作指针对象的成员变量 2. 指针的默认值为 “nil” ++ 与 -- 作为语句而非表达式 ...
- Oracle 热备份
Oracle 热备份是指数据库处于open状态下,对数据库的数据文件.控制文件.参数文件.密码文件等进行一系列备份操作. 热备是基于用户管理备份恢复的一种方式,也是除了RMAN备份之外较为常用的一种备 ...
- JavaScript笔录
JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. 1.JavaScri ...
- DNS_PROBE_FINISHED_NXDOMAIN
DNS_PROBE_FINISHED_NXDOMAIN 用如下链接清除dns即可 chrome://net-internals/#dns dns不稳定 手动绑定host即可
- Ubuntu TIP
recovery进系统硬盘是挂载为“只读”的,要想改文件需要remount / 并且添加“w”(写权限). 进一次crub,再root进入 折腾几次似乎就可以编辑磁盘上的文件了
- leetcode537
public class Solution { public string ComplexNumberMultiply(string a, string b) { var aryA = a.Split ...
- Windows Ruby 安装步骤
by 狂奔的蜗牛的博客 from http://www.host900.com/ 本文地址:http://www.host900.com/index.php/articles/285/ Windows ...