【题意】

给定一个无向图,求这个图满足所有点到顶点的最短路径不变的最小生成树

【AC】

注意双向边要开2*maxm

注意优先级队列 参考https://www.cnblogs.com/cielosun/p/5654595.html

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue> using namespace std;
int n,m;
const int maxn=1e4+;
const int maxm=1e5+;
const int inf=0x3f3f3f3f;
struct node{
int to;
int nxt;
int w;
}e[*maxm];
int head[maxn];
int tot;
int dis[maxn];
int fa[maxn];
bool vis[maxn];
void init(){
memset(head,-,sizeof(head));
tot=;
}
void add(int u,int v,int w){
e[tot].to=v;
e[tot].w=w;
e[tot].nxt=head[u];
head[u]=tot++;
}
struct Node{
int id;
int fa;
int d;
Node(int _id,int _d,int _fa):id(_id),d(_d),fa(_fa){}
bool operator < (const Node& a) const{
if(d!=a.d){
return d>a.d;
}
return fa>a.fa;
}
};
int dijkstra(int s){
priority_queue<Node> Q;
memset(vis,false,sizeof(vis));
memset(dis,inf,sizeof(dis));
memset(fa,inf,sizeof(fa));
dis[s]=;
fa[s]=;
Q.push(Node(s,dis[s],fa[s]));
int ans=;
while(!Q.empty()){
Node q=Q.top();
Q.pop();
int u=q.id;
if(vis[u]) continue;
vis[u]=true;
ans+=q.fa;
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].to;
int w=e[i].w;
if(dis[u]+w<dis[v]){
dis[v]=dis[u]+w;
fa[v]=w;
}else if(dis[u]+w==dis[v]&&w<fa[v]){
fa[v]=w;
}
Q.push(Node(v,dis[v],fa[v]));
}
}
return ans; }
int main(){
while(~scanf("%d%d",&n,&m)){
if(n==){
printf("0\n");
continue;
}
init();
int u,v,w;
for(int i=;i<m;i++){
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
int ans=dijkstra();
printf("%d\n",ans);
}
return ;
}

最新文章

  1. 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序
  2. C#.Net Mvc运营监控,计算方法/接口/action/页面执行时间
  3. Docker的学习--介绍和安装
  4. 【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化
  5. MySql集群FAQ----mysql主从配置与集群区别、集群中需要多少台计算机呢?为什么? 等
  6. php中::的使用方法
  7. UIDatePicker的简单用法
  8. [Duilib] 交替背景色设置失败的原因
  9. skip-grant-tables
  10. [CSS] CSS Transitions: Delays and Multiple Properties
  11. 关于TCP封包、粘包、半包
  12. 7.java的请求转发和请求重定向
  13. JavaSE中Collection集合框架学习笔记(1)——具有索引的List
  14. 对比MFC和Winform及WPF
  15. 【算法】二叉查找树实现字典API
  16. 如何开发由Create-React-App 引导的应用(四)
  17. 解决vi上下左右变ABCD问题
  18. 常见的四种文本自动分词详解及IK Analyze的代码实现
  19. hdu4064 三进制状态压缩 好题!
  20. Hive初步使用、安装MySQL 、Hive配置MetaStore、配置Hive日志《二》

热门文章

  1. Selenium私房菜系列6 -- 深入了解Selenium RC工作原理(1)
  2. 使用 Visual Studio 2017 部署 Azure 应用服务的 Web 应用
  3. MySQL存储引擎问题
  4. 5 Options for Distributing Your iOS App to a Limited Audience
  5. (2)JSTL的fmt国际化标签库
  6. Bootstrap历练实例:基本输入框组
  7. 人脸识别中的检测(在Opencv中加入了QT)
  8. ios之UITextfield
  9. git 不完全教程
  10. 洛谷 P2032 扫描