LuoguP1342请柬 【最短路/建反图】By cellur925
2024-08-29 07:26:05
开始就想直接正向跑一遍Dij把到各点的最短路加起来即可,后来发现与样例少了些,于是再读题发现需要也求出学生们回来的最短路。
但是注意到本题是有向图,如果是无向图就好说。
那么我们怎么解决?可以建一个反图。于是本题就解决了==
Code
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define maxn 2000090 using namespace std;
typedef long long ll; int n,m,tot;
int head[maxn],vis[maxn],hea[maxn];
ll ans,dis[maxn],d[maxn];
struct node{
int to,next;
int val;
}edge[maxn],edg[maxn]; void add(int x,int y,int z)
{
edge[++tot].to=y;
edge[tot].next=head[x];
head[x]=tot;
edge[tot].val=z;
} void add_nega(int x,int y,int z)
{
edg[++tot].to=y;
edg[tot].next=hea[x];
hea[x]=tot;
edg[tot].val=z;
} void dijkstra()
{
priority_queue<pair<int,int> >q;
memset(dis,,sizeof(dis));
q.push(make_pair(,));dis[]=;
while(!q.empty())
{
int u=q.top().second;q.pop();
if(vis[u]) continue;
vis[u]=;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].val)
{
dis[v]=dis[u]+edge[i].val;
if(!vis[v]) q.push(make_pair(-dis[v],v));
}
}
}
} void dijk()
{
priority_queue<pair<int,int> >q;
memset(d,,sizeof(d));
memset(vis,,sizeof(vis));
q.push(make_pair(,));d[]=;
while(!q.empty())
{
int u=q.top().second;q.pop();
if(vis[u]) continue;
vis[u]=;
for(int i=hea[u];i;i=edg[i].next)
{
int v=edg[i].to;
if(d[v]>d[u]+edg[i].val)
{
d[v]=d[u]+edg[i].val;
if(!vis[v]) q.push(make_pair(-d[v],v));
}
}
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add_nega(y,x,z);
}
dijkstra();
dijk();
for(int i=;i<=n;i++)
ans+=dis[i]+d[i]/*,printf("%d\n",dis[i])*/;
printf("%lld",ans);
return ;
}
最新文章
- rhel7端口开放和查询
- Matlab 的reshape函数
- python抓取网站URL小工具
- asp.net 柱形图
- 定时组件quartz系列<;一>;模拟定时组件小程序
- WEB黑客工具箱之LiveHttpHeaders介绍
- private、 protected、 public、 internal 修饰符的访问权限
- iOS 自动布局过程
- idea for Mac for循环快捷键
- 使用X.509数字证书加密解密实务(一)-- 证书的获得和管理
- 使用Actuator监控
- C语言基础一(敲打键盘、寻找资料)
- 二级接口ListableBeanFactory
- 第三次web作业
- gulp使用 笔记
- CF666E Forensic Examination 广义SAM、线段树合并、倍增、扫描线
- P3806 【模板】点分治1(CDQ分治)
- java操作Excel之POI(2)
- init只创建一次 只有父类的init创建servletContext的对象
- 116th LeetCode Weekly Contest N-Repeated Element in Size 2N Array
热门文章
- oracle 导出数据字典
- Java中常见的注解
- startActivity、 startActivityForResult 、广播的使用
- Apache Qpid Broker的安全机制
- 在DataGridView控件中实现冻结列分界线
- 使用 fetch 代替 ajax(在不支持的浏览器上使用 XHR); This kind of functionality was previously achieved using XMLHttpRequest.
- maven常用命令总结
- POJ2728 Desert King —— 最优比率生成树 二分法
- SKU多维属性状态判断算法
- Maze 解题报告