题目传送门

开始就想直接正向跑一遍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 ;
}

最新文章

  1. rhel7端口开放和查询
  2. Matlab 的reshape函数
  3. python抓取网站URL小工具
  4. asp.net 柱形图
  5. 定时组件quartz系列&lt;一&gt;模拟定时组件小程序
  6. WEB黑客工具箱之LiveHttpHeaders介绍
  7. private、 protected、 public、 internal 修饰符的访问权限
  8. iOS 自动布局过程
  9. idea for Mac for循环快捷键
  10. 使用X.509数字证书加密解密实务(一)-- 证书的获得和管理
  11. 使用Actuator监控
  12. C语言基础一(敲打键盘、寻找资料)
  13. 二级接口ListableBeanFactory
  14. 第三次web作业
  15. gulp使用 笔记
  16. CF666E Forensic Examination 广义SAM、线段树合并、倍增、扫描线
  17. P3806 【模板】点分治1(CDQ分治)
  18. java操作Excel之POI(2)
  19. init只创建一次 只有父类的init创建servletContext的对象
  20. 116th LeetCode Weekly Contest N-Repeated Element in Size 2N Array

热门文章

  1. oracle 导出数据字典
  2. Java中常见的注解
  3. startActivity、 startActivityForResult 、广播的使用
  4. Apache Qpid Broker的安全机制
  5. 在DataGridView控件中实现冻结列分界线
  6. 使用 fetch 代替 ajax(在不支持的浏览器上使用 XHR); This kind of functionality was previously achieved using XMLHttpRequest.
  7. maven常用命令总结
  8. POJ2728 Desert King —— 最优比率生成树 二分法
  9. SKU多维属性状态判断算法
  10. Maze 解题报告