poj 1511-- Invitation Cards (dijkstra+优先队列)
刚开始想复杂了,一直做不出来,,,其实就是两遍dijkstra+优先队列(其实就是板子题,只要能有个好的板子,剩下的都不是事),做出来感觉好简单......
题意:有n个车站和n个志愿者,早上每个志愿者去一个站点,晚上回去,问最少的开销是多少。是一个有向图
先一遍dijkstra求出早上的开销,在把车站倒过来及1到4变成4到1,然后再一遍dijkstra求出晚上的开销。
不要用memset去初始化为INF, 本题如果用memset会wa,记得开long long;
1 #include<cstdio>
2 #include<cstring>
3 #include<queue>
4 using namespace std;
5
6 const int INF = 1e9+10;
7 const int N = 1000010;
8 const int M = 1000010;
9 int tot;
10
11 struct Edge //dijkstra+优先队列板子
12 {
13 int v, cost, next;
14 }edge[M];
15
16 struct qnode
17 {
18 int v,c;
19 bool operator < (const qnode &x) const {
20 return c > x. c;
21 }
22 };
23
24 int head[M];
25 bool vis[N];
26 int dis[N];
27
28 void addedge(int u, int v, int w)
29 {
30 edge[tot]. v = v;
31 edge[tot]. cost = w;
32 edge[tot]. next = head[u];
33 head[u] = tot ++;
34 }
35
36 void dijkstra(int st)
37 {
38 memset(vis, 0, sizeof(vis));
39 for(int i=0;i<N;i++)
40 dis[i]=INF; //最好不要用memset去初始化为INF, 很容易wa
41 dis[st] = 0;
42 priority_queue <qnode> q;
43 q. push({st, 0});
44 while(! q. empty()){
45 qnode t = q. top();
46 q. pop();
47 if(vis[t. v])
48 continue;
49 vis[t. v] = true;
50 for(int i = head[t. v]; i != -1; i = edge[i]. next){
51 int v = edge[i]. v;
52 int cost = edge[i]. cost;
53 if(! vis[v] && dis[v] > dis[t. v] + cost){
54 dis[v] = dis[t. v] + cost;
55 q. push({v, dis[v]});
56
57 }
58 }
59 }
60 }
61
62 int a[N], b[N], c[N];
63
64 int main(){
65 int n, m,t;
66 scanf("%d",&t);
67 while(t--){
68 scanf("%d%d", &n, &m);
69 tot = 1;
70 memset(edge,0,sizeof edge);
71 memset(head, -1, sizeof(head));
72 for(int i=0;i<m;i++){
73 scanf("%d%d%d", &a[i], &b[i], &c[i]);
74 addedge(a[i], b[i], c[i]);
75 }
76 dijkstra(1); //早上的
77 int sum=0;
78 for(int i=2;i<=n;i++){
79 sum+=dis[i]; //把1到每个站的最小开销加起来
80 }
81 tot=1;
82 memset(edge,0,sizeof edge);
83 memset(head, -1, sizeof(head));
84 for(int i=0;i<m;i++){
85 addedge(b[i], a[i], c[i]); //正着是1到每个站,反过来就是每个站到1
86 }
87 dijkstra(1); //晚上的
88 for(int i=2;i<=n;i++){
89 sum+=dis[i]; //把每个站到1的最小开销加起来
90 }
91 printf("%d\n",sum);
92 }
93 return 0;
94 }
poj 1511-- Invitation Cards (dijkstra+优先队列)的更多相关文章
- POJ 1511 - Invitation Cards (dijkstra优先队列)
题目链接:http://poj.org/problem?id=1511 就是求从起点到其他点的最短距离加上其他点到起点的最短距离的和 , 注意路是单向的. 因为点和边很多, 所以用dijkstra优先 ...
- POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))
题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...
- POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / SCU 1132 Invitation Cards / ZOJ 2008 Invitation Cards / HDU 1535 (图论,最短路径)
POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / ...
- POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 16178 Accepted: 526 ...
- DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards
题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...
- [POJ] 1511 Invitation Cards
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 18198 Accepted: 596 ...
- POJ 1511 Invitation Cards (spfa的邻接表)
Invitation Cards Time Limit : 16000/8000ms (Java/Other) Memory Limit : 524288/262144K (Java/Other) ...
- POJ 1511 Invitation Cards (最短路spfa)
Invitation Cards 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/J Description In the age ...
- Poj 1511 Invitation Cards(spfa)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 24460 Accepted: 8091 De ...
- (简单) POJ 1511 Invitation Cards,SPFA。
Description In the age of television, not many people attend theater performances. Antique Comedians ...
随机推荐
- Python使用Protobuf&&如何赋值&&如何正反序列化
前言 使用protobuf主要是两个步骤,序列化和反序列化. 关于Proto有哪些数据类型,然后如何编写,此处就不赘述了,百度一下有很多. 此文主要是总结,python使用protobuf的过程,如何 ...
- Hbase Region合并
业务场景: Kafka+SparkStreaming+Hbase由于数据大量的迁移,再加上业务的改动,新增了很多表,导致rerigon总数接近4万(36个节点) 组件版本: Kafka:2.1.1 S ...
- mysql过滤复制
- /etc/hosts文件
这个文件告诉主机哪些域名对应哪些ip,哪些主机名对应哪些ip. 一般也三个域 网络ip地址 主机名或域名 主机名别名 两部分的时候 主机ip地址和主机名
- LeetCode-P53题解【动态规划】
本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: https://leetcode.com/problems/maximum-subarray/ ...
- python Mysql 多条件查询
做项目时,遇到一场景,前端至少传入一个参数,最多传入四个参数,根据单参数或者组合参数,从数据库筛选数据. 作为一个小白,思考之,从数学的角度,\(C_4^1 + C_4^2+C_4^3+C_4^4=1 ...
- CSS实现迷你键盘
最近做了一个迷你键盘的dome,这里分享给大家 dome下载地址(点击下载) 代码如下: <!DOCTYPE html> <html lang="en" > ...
- 使用EFCore连接Oracle数据库时出现的问题
问题 System.TypeLoadException: Method 'Create' in type 'Oracle.EntityFrameworkCore.Infrastructure.Inte ...
- JVM(二)类加载的时机及其过程
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的的整个生命周期包括: 加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化 ...
- YOLOv4
@ 目录 YOLO v4源码 CMake安装 CUDA安装 cuDNN安装 OpenCV安装 Cmake编译 VS编译 图像测试 测试结果 YOLOv4是最近开源的一个又快又准确的目标检测器. 首先看 ...