题意:给定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算法,单源路径最短问题)的更多相关文章

  1. 山东省第七届ACM竞赛 J题 Execution of Paladin (题意啊)

    题意:鱼人是炉石里的一支强大种族,在探险者协会里,圣骑士有了一张新牌,叫亡者归来,效果是召唤本轮游戏中7个已死鱼人.如果死掉的不足7个,那么召唤的数量就会不足7. 鱼人有很多,下面的4个是: 寒光智者 ...

  2. 山东省第七届ACM省赛------Memory Leak

    Memory Leak Time Limit: 2000MS Memory limit: 131072K 题目描述 Memory Leak is a well-known kind of bug in ...

  3. 山东省第七届ACM省赛------Reversed Words

    Reversed Words Time Limit: 2000MS Memory limit: 131072K 题目描述 Some aliens are learning English. They ...

  4. 山东省第七届ACM省赛------Triple Nim

    Triple Nim Time Limit: 2000MS Memory limit: 65536K 题目描述 Alice and Bob are always playing all kinds o ...

  5. 山东省第七届ACM省赛------The Binding of Isaac

    The Binding of Isaac Time Limit: 2000MS Memory limit: 65536K 题目描述 Ok, now I will introduce this game ...

  6. 山东省第七届ACM省赛------Fibonacci

    Fibonacci Time Limit: 2000MS Memory limit: 131072K 题目描述 Fibonacci numbers are well-known as follow: ...

  7. 山东省第七届ACM省赛------Julyed

    Julyed Time Limit: 2000MS Memory limit: 65536K 题目描述 Julyed is preparing for her CET-6. She has N wor ...

  8. 山东省第七届省赛 D题:Swiss-system tournament(归并排序)

    Description A Swiss-system tournament is a tournament which uses a non-elimination format. The first ...

  9. 山东省第七届ACM省赛

    ID Title Hint A Julyed 无 B Fibonacci 打表 C Proxy 最短路径 D Swiss-system tournament 归并排序 E The Binding of ...

随机推荐

  1. UI5-文档-4.30-Debugging Tools

    虽然我们在前面的步骤中添加了一个基本的测试覆盖率,但是我们似乎不小心破坏了我们的应用程序,因为它不再显示价格到我们的发票上.我们需要调试这个问题,并在有人发现之前修复它. 幸运的是,SAPUI5提供了 ...

  2. Python之filter函数

    描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 Tru ...

  3. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    1.什么是匿名内部类? 内部类,存在于另一个类内部的类,而匿名内部类,顾名思义,就是没有名字的内部类. 2.为什么需要匿名内部类? 每个inner class都能够各自继承某一实现类(implemen ...

  4. 一个js程序:离下一个圣诞节还有多少天?

    话不多说上代码: //离下一个圣诞节还有多少天 var christ=new Date(); christ.setMonth(11); christ.setDate(25); var year=now ...

  5. Excel 2003-单元格输入中带记忆功能

    最近有个同事问我,如何在Excel单元格输入中带记忆功能?其实很简单: 工具ó选项ó编辑ó将“记忆式键入”项选中ó确定: //附图[效果图]:

  6. 在spring MVC 中关于session失效的判断 有一个类SessionStatus

    SessionStatus status 表示的是当前Session的状态  status.isComplete()-->为true时,表示当前Session还未过期;-->false,表 ...

  7. urllib.parse.urldefrag(url)的解释

    引自https://www.cnblogs.com/ublue/articles/4471210.html 1.URL hash(片段标识符) 任一带#的URL称为片段URL(通常称为URL hash ...

  8. CentOS7.0重置Root的密码 (忘记密码)

    首先进入开启菜单,按下e键进入编辑现有的内核,如下图所示 然后滚动列表,找到ro,将它替换成rw,并加上init=/sysroot/bin/sh,最终变为如下图 然后按CTRL+X进入到单用户模式,在 ...

  9. Go语言中cannot convert adminname (type interface {}) to type *: need type assertion的解决办法

    解决的办法是把string(adminname)替换为adminname.(string).其它类型也是类似.

  10. sql server profiler 的使用

    sql server profiler  是作为监听sql语句执行的软件, 主要是看NTUserName,system是系统的,看自己数据库的名字.