百度之星 初赛三 最短路 2 Dijkstra
打比赛的时候切的,不过竟然 wa 了 14 次~
挺简单的,直接在跑 $Dijkstra$ 的时候记录一下路径最大值就好了.
#include <bits/stdc++.h>
#define inf 100000000000000
#define ll long long
#define mod 998244353
#define N 1003
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,m,s;
struct Node
{
int u;
ll dis;
Node(int u=0,ll dis=0):u(u),dis(dis){}
bool operator<(Node b)const
{
return b.dis<dis;
}
};
priority_queue<Node>q;
int hd[N],nex[N<<2],pre[N<<2],edges,done[N],to[N<<2],now[N<<2];
ll f[N][N],d[N];
ll val[N<<2];
inline void addedge(int u,int v,ll c)
{
nex[++edges]=hd[u],hd[u]=edges,to[edges]=v,val[edges]=c;
}
inline void Dijkstra()
{
int i,u,v;
for(i=1;i<=n;++i) done[i]=0;
for(i=0;i<=n;++i) d[i]=inf,pre[i]=0,now[i]=i;
d[s]=0, q.push(Node(s,0)), pre[s]=0,now[s]=0;
while(!q.empty())
{
Node e=q.top(); u=e.u,q.pop();
if(done[u]) continue;
done[u]=1;
if(u!=s)
{
now[u]=max(u, pre[u]);
}
for(i=hd[u];i;i=nex[i]){
if(d[to[i]]>=d[u]+val[i]){
if(d[to[i]]>d[u]+val[i])
{
d[to[i]]=d[u]+val[i];
pre[to[i]]=now[u];
q.push(Node(to[i],d[to[i]]));
}
else {
if(now[u]<pre[to[i]]) pre[to[i]]=now[u];
}
}
}
}
}
int main() {
setIO("input");
using namespace IO;
int T;
scanf("%d",&T);
while(T--) {
int i,j;
scanf("%d%d",&n,&m);
edges=0;
for(i=1;i<=n;++i) hd[i]=0;
for(i=1;i<=n;++i) for(j=1;j<=n;++j) f[i][j]=inf;
for(i=1;i<=n;++i) f[i][i]=0;
for(i=1;i<=m;++i) {
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,(ll)c), addedge(b,a,(ll)c), f[a][b]=f[b][a]=min(f[a][b],(ll)c);
}
int ans=0;
for(i=1;i<=n;++i) {
s=i, Dijkstra();
for(j=1;j<=n;++j)
ans=(long long) (ans+pre[j])%mod;
}
printf("%d\n",ans); }
return 0;
}
百度之星 初赛三 最短路 2 Dijkstra的更多相关文章
- HDU 6787 Chess 2020百度之星 初赛三 T5 题解 dp
传送门:HDU 6787 Chess Problem Description 你现在有一个棋盘,上面有 n 个格子,格子从左往右,1,-,n 进行标号.你可以在棋盘上放置恰好 m 个传送器,并且对于每 ...
- 【百度之星初赛A】路径交 LCA+线段树
[百度之星初赛A]路径交 Problem Description 给定一棵n个点的树,以及m条路径,每次询问第L条到第R条路径的交集部分的长度(如果一条边同时出现在2条路径上,那么它属于路径的交集). ...
- 2016百度之星 初赛2A ABEF
只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...
- HDU 5690:2016"百度之星" - 初赛 All X
原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others) Mem ...
- 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列
Gym Class Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- 数学 2015百度之星初赛2 HDOJ 5255 魔法因子
题目传送门 /* 数学:不会写,学习一下这种解题方式:) 思路:设符合条件的数的最高位是h,最低位是l,中间不变的部分为mid,由题意可得到下面的公式(这里对X乘上1e6用a表示,b表示1e6) (h ...
- LIS 2015百度之星初赛2 HDOJ 5256 序列变换
题目传送门 题意:中文题面 分析:LIS(非严格):首先我想到了LIS,然而总觉得有点不对:每个数先减去它的下标,防止下面的情况发生:(转载)加入序列是1,2,2,2,3,这样求上升子序列是3,也就是 ...
- Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道
题目传送门 /* 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! */ ...
- BFS 2015百度之星初赛2 HDOJ 5254 棋盘占领
题目传送门 /* BFS:先把1的入队,每个1和它相邻的组合后看看能不能使0变1,若有则添加入队,change函数返回改变了多少个0 注意:结果还要加上原来占领的 */ #include <cs ...
随机推荐
- mysql开启和关闭安全模式
今天在进行数据库UPDATE的时候出了一个问题,我把非主键的字段当作UPDATE的条件(筛选条件)时,提示了如下的语句 Error Code: 1175. You are using safe upd ...
- file_put_contents实现内容追加
file_put_contents("test.txt", "This is another something.", FILE_APPEND); FILE_A ...
- spark教程(二)-shell操作
spark 支持 shell 操作 shell 主要用于调试,所以简单介绍用法即可 支持多种语言的 shell 包括 scala shell.python shell.R shell.SQL shel ...
- 公司PL/SQL考核及小结
一.数据库初始化脚本 -- Create table 学生信息 drop table HAND_STUDENT; create table HAND_STUDENT ( STUDENT_NO ) no ...
- sql server truncate语句
truncate语句 --truncate table '表名' --这样就利用SQL语句清空了该数据表,而不保留日志
- PHP--API
PHP所有能力都是函数,内置1000多个函数,不是每一个函数都默认直接可以使用,有一些需要安装或者启用额外的“插件”扩展. 1,获取字符串长度 <?php $str='hello'; echo ...
- 垃圾回收gc --翻译
原文在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management.基本保持了平译,并在一些地方做了概念解释.(转 ...
- host文件介绍
默认位置为%SystemRoot%\system32\drivers\etc\,但也可以改变. 动态目录由注册表键\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe ...
- 转(static final 和final的区别)
学习java的时候常常会被修饰符搞糊涂,这里总结下static final和final的区别. 1.static 强调只有一份,final 说明是一个常量,final定义的基本类型的值是不可改变的,但 ...
- Open Project' has encountered a problem
用Eclipse作android开发时,打开IDE,经常有的工程目录点击后会出现下面的问题提示: 这种情况往往是工程文件夹中的.project文件丢失了,所以从别的工程复制过来,就可以用啦.