CCF_201612-4_交通规划
2024-10-08 07:04:41
http://115.28.138.223/view.page?gpid=T44
好像也没想象中的那么难,没办法,当初连个优先队列dij都不会写= =
在优先队列dij算法上加上相等的时候的处理就可以了。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std; struct node
{
int pos,cost;
node(int a,int b):pos(a),cost(b){};
friend bool operator <(node x,node y)
{
return x.cost > y.cost;
}
};
struct edge
{
int to,cost;
edge(int a,int b):to(a),cost(b){};
};
vector<edge> v[];
bool vis[] = {};
int dis[],cost[],n,m; void dij()
{
memset(dis,0x3f,sizeof(dis));
memset(cost,0x3f,sizeof(cost));
dis[] = ;
cost[] = ;
priority_queue<node> q;
q.push(node(,));
while(!q.empty())
{
int now = q.top().pos;
if(vis[now]) continue;
vis[now] = ;
for(int i = ;i < v[now].size();i++)
{
int to = v[now][i].to,c = v[now][i].cost;
if(vis[to]) continue;
if(dis[to] > dis[now]+c)
{
dis[to] = dis[now]+c;
cost[to] = c;
q.push(node(to,dis[to]));
}
else if(dis[to] == dis[now]+c) cost[to] = min(cost[to],c);
}
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i = ;i <= m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
v[a].push_back(edge(b,c));
v[b].push_back(edge(a,c));
}
dij();
int ans = ;
for(int i = ;i <= n;i++) ans += cost[i];
printf("%d\n",ans);
return ;
}
最新文章
- python之生成器
- mysql-Federated存储方式,远程表,相当于sql server的linked server
- IIS7.5使用web.config设置伪静态的二种方法(转)
- php正则表达式 常用记录
- linux远程登录(Telnet、SSH)
- Jquery 在页面加载后执行的几种方式
- LeetCode Maximum Size Subarray Sum Equals k
- MySQL与Oracle 差异比较之六触发器
- 写实例学习html5 WebSocket
- Number Transformation
- flask 后台表单验证模块
- centos 添加epel、remi仓库和ELRepo仓库
- 妙用 `package.json` 快速 `import` 文件(夹)
- 正六边形网格化(Hexagonal Grids)原理与实现
- 获取服务器时间js代码
- linux系统下Nagios+rrdtool+Pnp4nagios监控环境的搭建
- 将远程git仓库里的指定分支拉取到本地(本地不存在的分支
- pytest+request 接口自动化测试
- AOP拦截器 表达式写法
- 每日英语:The Risks of Big Data for Companies