poj 1511 优先队列优化dijkstra *
2015-06-20 10:33
363 查看
题意:两遍最短路
链接:点我
注意结果用long long
链接:点我
注意结果用long long
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<map> using namespace std; #define MOD 1000000007 #define pb(a) push_back(a) const int INF=0x3f3f3f3f; const double eps=1e-5; typedef long long ll; #define cl(a) memset(a,0,sizeof(a)) #define ts printf("*****\n"); const int MAXN=1000005; int p[MAXN],q[MAXN],w[MAXN]; int n,m,tt,cnt; /* * 使用优先队列优化Dijkstra算法 * 复杂度O(ElogE) * 注意对vector<Edge>E[MAXN]进行初始化后加边 */ struct qnode { int v; int c; qnode(int _v=0,int _c=0):v(_v),c(_c){} bool operator <(const qnode &r)const { return c>r.c; } }; struct Edge { int v,cost; Edge(int _v=0,int _cost=0):v(_v),cost(_cost){} }; vector<Edge>E[MAXN]; bool vis[MAXN]; int dist[MAXN]; void Dijkstra(int n,int start)//点的编号从1开始 { memset(vis,false,sizeof(vis)); for(int i=1;i<=n;i++)dist[i]=INF; priority_queue<qnode>que; while(!que.empty())que.pop(); dist[start]=0; que.push(qnode(start,0)); qnode tmp; while(!que.empty()) { tmp=que.top(); que.pop(); int u=tmp.v; if(vis[u])continue; vis[u]=true; for(int i=0;i<E[u].size();i++) { int v=E[tmp.v][i].v; int cost=E[u][i].cost; if(!vis[v]&&dist[v]>dist[u]+cost) { dist[v]=dist[u]+cost; que.push(qnode(v,dist[v])); } } } } void addedge(int u,int v,int w) { E[u].push_back(Edge(v,w)); } int main() { int i,j,k; #ifndef ONLINE_JUDGE freopen("1.in","r",stdin); #endif scanf("%d",&tt); while(tt--) { scanf("%d%d",&n,&m); for(i=0;i<=n;i++) E[i].clear(); for(i=0;i<m;i++) { scanf("%d%d%d",&p[i],&q[i],&w[i]); addedge(p[i],q[i],w[i]); } Dijkstra(n,1); ll sum=0; for(i=2;i<=n;i++) { sum+=dist[i]; } for(i=0;i<=n;i++) E[i].clear(); for(i=0;i<m;i++) addedge(q[i],p[i],w[i]); Dijkstra(n,1); for(i=2;i<=n;i++) { sum+=dist[i]; } printf("%I64d\n",sum); } }
相关文章推荐
- Nginx中使用Lua脚本配置示例
- Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子
- fedora21: failed to start load kernel modules 解决方法
- OpenLayers学习笔记8——使用servlet从mysql获取数据并标注
- xsi xsd
- linux下vi编辑器backspace不能正确删除文字
- tomcat 默认项目
- POJ- 1579 Function Run Fun
- Objective-C----内存管理
- Android安装卸载apk包
- Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)
- 把ImageMagic库编译进nginx服务器的一些必要配置
- 黑马程序员——JAVA笔记——StringBuffer和StringBuilder
- Leetcode:Insertion Sort List
- SpringMVC+Spring3+Hibernate4开发环境的搭建
- 关于android 如何安装 assets文件下的apk
- 深入理解javascript系列之序章
- C# 编写Windows Service(windows服务程序)
- mac 安装Homebrew early EOF错误解决方法
- Android开发之成语连连看