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 ...
随机推荐
- 【Flutter】可滚动组件之SingleChildScrollView
前言 SingleChildScrollView类似于Android中的ScrollView,它只能接收一个子组件. 接口描述 const SingleChildScrollView({ Key ke ...
- Flutter 基础组件:状态管理
前言 一个永恒的主题,"状态(State)管理",无论是在React/Vue(两者都是支持响应式编程的Web开发框架)还是Flutter中,他们讨论的问题和解决的思想都是一致的. ...
- 容器编排系统K8s之APIService资源
前文我们聊到了k8s上crd资源的使用和相关说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14267400.html:今天我们来了解下k8s的第二种扩展 ...
- os-Bytes环境变量劫持
信息收集 netdiscovery -i eth0 nmap -sV -sC 192.168.43.74 -oA os-Bytes gobuster -u 192.168.43.74 -w /usr/ ...
- 开篇:免费开源的趣讲 ZooKeeper 教程(连载)
本文作者:HelloGitHub-老荀 一.起因 良好的开端,是成功的一半. 我是作者老荀,一个普通的程序员,没有 985 和 211 的背景,也从没在大厂工作过.仅仅是喜欢研究技术,一直想做一个讲解 ...
- GitLab-CI/CD入门实操
以Spring boot项目为例.传统方式是本地生成jar包,FTP上传服务器,重启服务:如果是内网测试服,也可以在服务器上安装git,在服务器上编译打包.但这都需要人为干预,于是CI/CD就出现了. ...
- 词嵌入之Word2Vec
词嵌入要解决什么问题 在自然语言系统中,词被看作最为基本的单元,如何将词进行向量化表示是一个很基本的问题,词嵌入(word embedding)就是把词映射为低维实数域向量的技术. 下面先介绍几种词的 ...
- Junit测试和反射
Junit单元测试 测试分类 黑盒测试:不需要写代码,给输入值,看程序能否得到输出期望值. 白盒测试:需要些代码,关注程序具体的执行流程. Junit的使用 步骤 定义一个测试类(测试用例). 定义测 ...
- CoeMonkey少儿编程第4章 变量
点击这里,现在就开启CodeMonkey的趣味编程之旅. 目标 了解什么是变量 了解变量的命名规则 掌握如何使用变量 变量 什么是变量?顾名思义,变量就是可以变化的量. 和变量相对的是常量,即不可变化 ...
- code-server Command ' ' not found
由于通过一些特殊的方式登录linux用户后,全局变量不会自动加载,需要在 vscode 的 bash terminal手动读取 输入 source /etc/profile 或者vim ~/.bash ...