山东省第七届ACM竞赛 C题 Proxy (Dijkstra算法,单源路径最短问题)
题意:给定0-n+1个点,和m条边,让你找到一条从0到n+1的最短路,输出与0相连的结点。。。
析:很明显么,是Dijkstra算法,不过特殊的是要输出与0相连的边,所以我们倒着搜,也是从n+1找到0,
那么不就能找到与0相连的边么,注意判断相等值的时候。当时写错了好多次,就是没有考虑好边界。
代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring> using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 1000 + 100;
int n;
struct edge{
int from, to, dist;
edge(int u, int v, int d) : from(u), to(v), dist(d) { }
};
struct Headnode{
int d, u;
Headnode(int dd, int uu) : d(dd), u(uu) { }
bool operator < (const Headnode &rhs) const {
return d > rhs.d;
}
};
struct Dijkstra{
int m;
vector<edge> edges;
vector<int> G[maxn];
bool done[maxn];
int d[maxn];
int p[maxn]; void init(){
for(int i = 0; i <= n+1; ++i) G[i].clear();
edges.clear();
} void addedge(int f, int t, int d){
edges.push_back(edge(f, t, d));
m = edges.size();
G[f].push_back(m-1);
} void dijkstra(int s){
priority_queue<Headnode> q;
for(int i = 0; i <= n+1; ++i) d[i] = INF;
d[s] = 0; memset(done, 0, sizeof(done));
q.push(Headnode(0, s));
while(!q.empty()){
Headnode x = q.top(); q.pop();
int u = x.u;
if(done[u]) continue;
done[u] = true;
for(int i = 0; i < G[u].size(); ++i){
edge &e = edges[G[u][i]];
if(d[e.to] >= d[u] + e.dist){
d[e.to] = d[u] + e.dist;
p[e.to] = u;
q.push(Headnode(d[e.to], e.to));
}
else if(d[e.to] == d[u] + e.dist) p[e.to] = min(u, p[e.to]);
}
}
}
};
Dijkstra dijk; int main(){
int T, m; cin >> T;
while(T--){
dijk.init();
scanf("%d %d", &n, &m);
int u, v, c;
for(int i = 0; i < m; ++i){
scanf("%d %d %d", &u, &v, &c);
dijk.addedge(v, u, c);
}
dijk.dijkstra(n+1); if(dijk.d[0] >= INF) printf("-1\n");
else if(dijk.p[0] == n+1) printf("0\n");
else printf("%d\n", dijk.p[0]);
}
return 0;
}
山东省第七届ACM竞赛 C题 Proxy (Dijkstra算法,单源路径最短问题)的更多相关文章
- 山东省第七届ACM竞赛 J题 Execution of Paladin (题意啊)
题意:鱼人是炉石里的一支强大种族,在探险者协会里,圣骑士有了一张新牌,叫亡者归来,效果是召唤本轮游戏中7个已死鱼人.如果死掉的不足7个,那么召唤的数量就会不足7. 鱼人有很多,下面的4个是: 寒光智者 ...
- 山东省第七届ACM省赛------Memory Leak
Memory Leak Time Limit: 2000MS Memory limit: 131072K 题目描述 Memory Leak is a well-known kind of bug in ...
- 山东省第七届ACM省赛------Reversed Words
Reversed Words Time Limit: 2000MS Memory limit: 131072K 题目描述 Some aliens are learning English. They ...
- 山东省第七届ACM省赛------Triple Nim
Triple Nim Time Limit: 2000MS Memory limit: 65536K 题目描述 Alice and Bob are always playing all kinds o ...
- 山东省第七届ACM省赛------The Binding of Isaac
The Binding of Isaac Time Limit: 2000MS Memory limit: 65536K 题目描述 Ok, now I will introduce this game ...
- 山东省第七届ACM省赛------Fibonacci
Fibonacci Time Limit: 2000MS Memory limit: 131072K 题目描述 Fibonacci numbers are well-known as follow: ...
- 山东省第七届ACM省赛------Julyed
Julyed Time Limit: 2000MS Memory limit: 65536K 题目描述 Julyed is preparing for her CET-6. She has N wor ...
- 山东省第七届省赛 D题:Swiss-system tournament(归并排序)
Description A Swiss-system tournament is a tournament which uses a non-elimination format. The first ...
- 山东省第七届ACM省赛
ID Title Hint A Julyed 无 B Fibonacci 打表 C Proxy 最短路径 D Swiss-system tournament 归并排序 E The Binding of ...
随机推荐
- 基于OpenGL编写一个简易的2D渲染框架-03 渲染基本几何图形
阅读文章前需要了解的知识,你好,三角形:https://learnopengl-cn.github.io/01%20Getting%20started/04%20Hello%20Triangle/ 要 ...
- Datetime 24小时制
24小时制: DateTime dt = DateTime.Now; string dt24 = dt.ToString("yyyy-MM-dd HH:mm:ss"); 12小时制 ...
- Git----分支管理之解决冲突03
人生不如意之事十之八九,合并分支往往也不是一帆风顺. 准备新的feature1分支,继续我们的新分支开发: $ git checkout -b feature1Switched to a new br ...
- UITableView cell 半透明效果,改变cell高度时背景不闪的解决方法
如果直接指定cell.backgroundColor = = [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 ...
- 解决PL/SQL导出cvs文件中文显示乱码
方法 1 导出csv格式文件 新建excel文件 比如 a.xls excel软件打开 选择菜单数据 -导入外部数据 unicode默认下一步 选择 逗号分隔符 点击确定导入完成 方法 2 导出成h ...
- one by one 项目 part 3
mysql error:Table 'performance_schema.session_variables' doesn't exist 打开cmd 输入:mysql_upgrade -u roo ...
- bedtools简介及应用
1)背景处理基因组数据中,比较基因组不同区域,例如寻找overlap等,是一种基本的且常见的问题.虽然UCSC 中‘Table Browser’或者Galaxy可以用来处理,但是当这些工具面对大的数据 ...
- spring学习笔记(三)
spring jdbc spring tx 1.spring的jdbc模板 Spring提供了很多持久层技术的模板类简化编程: 1.1.jdbc模板的基本使用 @Test // JDBC模板的基本使用 ...
- IntelliJ IDEA SVN
第一步:下载svn的客户端,通俗一点来说就是小乌龟啦!去电脑管理的软件管理里面可以直接下载,方便迅速 下载之后直接安装就好了,但是要注意这里的这个文件也要安装上,默认是不安装的,如果不安装,svn中的 ...
- CentOS 下安装 OpenOffice4.0
一.更新服务器 yum源 [root@APP2 /]# yum clean all [root@APP2 /]# yum makecache [root@APP2 /]# yum update 1.首 ...