关注
dijskra, 时间相同时, 优先选蛋糕最多的。 #include <stdio.h>
#include <string.h>
#include <vector>
#include <iostream>
#include <queue>
using namespace std;
const int n = 10000 + 10;
const int m = 2000000 + 10;
typedef long long ll;
ll a[n];
struct edge
{
int v;
int next;
ll time;
}e[m];
int head[n];
int cnt = 0;
void add(int u, int v, int t)
{
e[cnt].v = v;
e[cnt].time = t;
e[cnt].next = head[u];
head[u] = cnt++;
}
ll times[n];
ll cakes[n];
struct node
{
int fa;
int u;
ll time;
friend bool operator<(const node &a , const node &b)
{
return a.time>b.time; // ascending sort
}
};
priority_queue<node> q;
void dij(int s, int d)
{
node cur;
memset(cakes, 0, sizeof(cakes));
memset(times, -1, sizeof(times));
for(int i = head[s]; i != -1; i = e[i].next)
{
node tmp;
tmp.fa = s;
tmp.u = e[i].v;
tmp.time = e[i].time;
q.push(tmp);
}
cakes[s] = a[s];
times[s] = 0;
int i = 0;
while(!q.empty())
{
i+=1;
cur = q.top();
q.pop();
//没有走过, 或者有更好的走法
if(times[cur.u] == -1 || cur.time < times[cur.u])
{
times[cur.u] = cur.time;
cakes[cur.u] = cakes[cur.fa] + a[cur.u];
}
// 时间相同,选蛋糕更多的
else if(cur.time == times[cur.u])
{
if(cakes[cur.fa] + a[cur.u] > cakes[cur.u])
cakes[cur.u] = cakes[cur.fa] + a[cur.u];
continue;
}
else
{
continue;
}
/* cout << cur.u << " " << cakes[cur.u] << endl; */
for(int i = head[cur.u]; i != -1; i = e[i].next)
{
if(times[e[i].v] != -1 && cur.time + e[i].time > times[e[i].v])
continue;
node tmp;
tmp.fa = cur.u;
tmp.u = e[i].v;
tmp.time = cur.time + e[i].time;
q.push(tmp);
}
}
cout << times[d] << " " << cakes[d] << endl;
}
int main()
{
int n, m, s, d;
cin >> n >> m >> s >> d;
s--;
d--;
for(int i = 0; i < n; ++i)
{
cin >> a[i];
}
int u, v, t;
memset(head, -1, sizeof(head));
for(int i = 0; i < m; ++i)
{
cin >> u >> v >> t;
u--;
v--;
add(u, v, t);
add(v, u, t);
}
dij(s, d);
}
//6 80
查看原帖
点赞 1
相关推荐
11-29 01:43
University of Glasgow golang 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 十二月请对我好一点 #
8667次浏览 157人参与
# 父母对你找工作是助力还是阻力? #
3221次浏览 70人参与
# 为了去实习,我赌上了___ #
3097次浏览 41人参与
# 聊聊我眼中的AI #
486120次浏览 6733人参与
# 工作中出现了XX情况正常吗 #
10112次浏览 116人参与
# 哪一瞬间让你觉得“这班不如不上” #
2349次浏览 23人参与
# 一人推荐一个值得做的项目 #
3316次浏览 52人参与
# uu们,春招你还来吗? #
2308次浏览 25人参与
# 高薪高压 vs 低薪wlb,你怎么选? #
3940次浏览 42人参与
# 回顾今年你干过的最“勇”的一件事 #
4941次浏览 73人参与
# 工作前VS工作后,你的心态变化 #
4222次浏览 35人参与
# 秋招有哪些公司要求提前实习 #
91221次浏览 488人参与
# 公司福利里最没用的一项是啥 #
2707次浏览 56人参与
# 机械人的金三校招总结 #
39004次浏览 465人参与
# 如何用一句话描述你的职业 #
28097次浏览 181人参与
# 追觅科技求职进展汇总 #
29016次浏览 181人参与
# 职场上哪些事情令人讨厌 #
32507次浏览 143人参与
# 机械人的薪资开到多少,才适合去? #
150968次浏览 530人参与
# 你收到了团子的OC了吗 #
1469673次浏览 11805人参与
# 毕业季,给职场新人一些建议 #
162195次浏览 2367人参与
