ZOJ-2008-Invitation Cards(dijkstra)
题意:
在有向加权图中G(V,E),邮局要从起点S向其他n个节点发送邮件,于是派出n个邮递员,分别到达其他n个地点发送,然后回到起点S,求出所有邮递员所经过的总路程的最小值。
分析:
正向一次dijkstra,反向一次dijkstra
// File Name: 2008.cpp // Author: Zlbing // Created Time: 2013年08月04日 星期日 14时18分49秒 #include<iostream> #include<string> #include<algorithm> #include<cstdlib> #include<cstdio> #include<set> #include<map> #include<vector> #include<cstring> #include<stack> #include<cmath> #include<queue> using namespace std; #define CL(x,v); memset(x,v,sizeof(x)); #define INF 0x3f3f3f3f #define LL long long #define REP(i,r,n) for(int i=r;i<=n;i++) #define RREP(i,n,r) for(int i=n;i>=r;i--) const int MAXN=1e6+100; struct Edge{int from,to,dist; }; struct HeapNode{int d,u;bool operator <(const HeapNode &rhs)const{return d>rhs.d;} }; vector<int> O_G[MAXN]; vector<Edge> O_edges; struct Dijkstra{int n,m;//点和边数vector<Edge>edges;//边列表vector<int>G[MAXN];//每个节点出发的边编号(从0开始编号)bool done[MAXN];//是否永久标记int d[MAXN];//s到各个点的距离int p[MAXN];//最短路中的上一条边void init(int n){this->n=n;for(int i=0;i<=n;i++)//清空邻接表 {G[i].clear();}edges.clear();//清空边表 }void AddEdge(int from,int to,int dist){//如果是无向图,每条无向边需调用2次AddEdgeedges.push_back((Edge){from,to,dist});m=edges.size();G[from].push_back(m-1);}void dijkstra(int s){//求s到所有点的距离priority_queue<HeapNode> Q;for(int i=0;i<=n;i++)d[i]=INF;d[s]=0;memset(done,0,sizeof(done));Q.push((HeapNode){0,s});while(!Q.empty()){HeapNode x=Q.top();Q.pop();int u=x.u;if(done[u])continue;done[u]=true;for(int i=0;i<G[u].size();i++){Edge& e=edges[G[u][i]];if(d[e.to]>d[u]+e.dist){d[e.to]=d[u]+e.dist;p[e.to]=G[u][i];Q.push((HeapNode){d[e.to],e.to});}}}} }; Dijkstra solver; int main() { int N; scanf("%d",&N);while(N--){int n,m;scanf("%d%d",&n,&m);solver.init(n);int a,b,c;for(int i=0;i<=n;i++)O_G[i].clear();O_edges.clear();for(int i=0;i<m;i++){scanf("%d%d%d",&a,&b,&c);solver.AddEdge(a,b,c);O_edges.push_back((Edge){b,a,c});int mm=O_edges.size()-1;O_G[b].push_back(mm);}solver.dijkstra(1);int ans=0;for(int i=1;i<=n;i++)ans+=solver.d[i];for(int i=1;i<=n;i++)solver.G[i]=O_G[i];solver.edges=O_edges;solver.dijkstra(1);for(int i=1;i<=n;i++)ans+=solver.d[i];printf("%d\n",ans);}return 0; }
转载于:https://www.cnblogs.com/arbitrary/p/3238291.html
ZOJ-2008-Invitation Cards(dijkstra)相关推荐
- POJ 1511 Invitation Cards——Dijkstra优先队列优化+反向建图
[题目描述] In the age of television, not many people attend theater performances. Antique Comedians of M ...
- Invitation Cards POJ - 1511 SPFA(dijkstra+反向建图+邻接表(下标过大)+输入输出用stdio(iostream超时))
题目大意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接 到达终点站,是单向的,每条路线有它自己的车费.有P个人早上从1出发 ,他们要到达每一个公交站点, 然后到了晚上再返回点 ...
- 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)
题干: In the age of television, not many people attend theater performances. Antique Comedians of Mali ...
- HDU1535 Invitation Cards(链式前向星+堆优化dijkstra)[C++]
目录 题目及翻译 题面 输入 输出 输入样例 输出样例 题目思路 注意事项 AC代码 C++ 题目及翻译 题面 In the age of television, not many people at ...
- J - Invitation Cards POJ - 1511
J - Invitation Cards POJ - 1511 题意: 共有 n 个站点,n 个志愿者从1 出发,分别到达不同的站点,晚上全部回到 1 ,求他们总的最小花费是多少? 思路: 首先想到从 ...
- 【HDU】1535 Invitation Cards 最短路
传送门:[HDU]1535 Invitation Cards 题目分析:题目真难读......其实题目的意思就是让求从编号为1的点到其他所有点的最短路距离之和加上其他所有点到编号为1的点的最短路距离之 ...
- Invitation Cards(建反图 + 跑两遍SPFA)
题目如下: In the age of television, not many people attend theater performances. Antique Comedians of Ma ...
- POJ 1511:Invitation Cards
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 26994 Accepted: 895 ...
- Invitation Cards POJ - 1511【最短路】
Invitation Cards POJ - 1511 题目 思路:建两张图,一张正向一张反向,先在正向图里求一遍一号点到所有点的距离,再在反向图里求一遍,反向图里一号点到所有点的距离的意思是所有点到 ...
- Invitation Cards——正反最短路
poj 1511: Invitation Cards 题意:点1到其他点的最短距离+其他点到点1的最短距离 的总和. 1.双向建图 正向建图是1到其他点的距离,反向建图则是其他点到1的距离. 2.数据 ...
最新文章
- 部署可扩展的目标检测管道:推理过程(下)
- Ubuntu系统创建AndroidStudio启动图标(快捷方式)
- Android关机流程源码分析
- ML之UL:无监督学习Unsupervised Learning的概念、应用、经典案例之详细攻略
- mysql-binlog日志恢复数据库
- CanFestival移植到STM32F103
- ClickHouse最简单的安装方法
- 权限申请弹框_安卓Q | 位置权限三态化解析,用户要关心,开发者须警惕!
- vue进入页面加载数据缓慢实现loading提示
- (Excel)如何使用Excel进行四舍六入数据修约
- 物联网应用层的关键技术有哪些
- 数据科学数据清理和可视化,适合使用python的初学者
- 由计算机病毒引起的问题属于,多数情况下由计算机病毒程序引起的问题属于()故障。A.硬件B.软件C.操作D.电源...
- Java中的即时编译器
- python 之hellow
- CoAP协议学习笔记 1.2 一张表了解 CoAP 协议
- Beta Distribution Guided Aspect-aware Graph for Aspect Category Sentiment Analysis论文阅读笔记(EMNLP2021)
- 最值得关注的五款睡眠监护仪:Sense、梦加上榜
- 华为云服务器使用教程
- duffing matlab,duffing方程matlab