博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷1342]请柬
阅读量:6126 次
发布时间:2019-06-21

本文共 1291 字,大约阅读时间需要 4 分钟。

题目大意:

给定一个起点,求以其余所有点分别为必经点的最短回路之和。

思路:

建立反向图,在正反图上分别跑一遍Dijkstra,最后求和即可。
注意数据规模,要开long long不然会WA,只能拿25分。

1 #include
2 #include
3 #include
4 #include
5 inline int getint() { 6 register char ch; 7 while(!isdigit(ch=getchar())); 8 register int x=ch^'0'; 9 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');10 return x;11 }12 const long long inf=0x7fffffffffffffff;13 const int V=1000001;14 struct Edge {15 int to;16 long long w;17 };18 std::vector
e1[V],e2[V];19 inline void add_edge(std::vector
*e,const int u,const int v,const long long w) {20 e[u].push_back((Edge){v,w});21 }22 struct Vertex {23 int id;24 long long dis;25 bool operator > (const Vertex &another) const {26 return dis>another.dis;27 }28 };29 int n;30 long long dis1[V],dis2[V];31 __gnu_pbds::priority_queue
> q;32 __gnu_pbds::priority_queue
>::point_iterator p[V];33 const int s=1;34 inline void Dijkstra(long long *dis,std::vector
*e) {35 q.clear();36 for(register int i=1;i<=n;i++) {37 p[i]=q.push((Vertex){i,dis[i]=(i==s)?0:inf});38 }39 while(q.top().dis!=inf) {40 int x=q.top().id;41 for(register unsigned i=0;i

 

转载于:https://www.cnblogs.com/skylee03/p/7397509.html

你可能感兴趣的文章
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
JAVA数组的定义及用法
查看>>
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>
设计模式(十一):FACADE外观模式 -- 结构型模式
查看>>
iOS xcodebuile 自动编译打包ipa
查看>>
程序员眼中的 SQL Server-执行计划教会我如何创建索引?
查看>>
cmake总结
查看>>
数据加密插件
查看>>
linux后台运行程序
查看>>