HDU4725 The Shortest Path in Nya Graph dij
2016-03-26 18:41
274 查看
分析:对于每一层,原来n个点,然后扩展为原来的三倍,每一层扩展一个入点,一个出点,然后跑最短路
注:tmd我把一个n写成m了,然后wa了7次,我都要怀疑人生了
View Code
注:tmd我把一个n写成m了,然后wa了7次,我都要怀疑人生了
#include<cstdio> #include<cstring> #include<queue> #include<cstdlib> #include<algorithm> #include<vector> #include<cmath> using namespace std; typedef long long LL; const int N=1e5+5; const int INF=0x3f3f3f3f; struct Edge{ int v,w,next; bool operator<(const Edge &e)const{ return w>e.w; } }edge[N*20]; int head[N*3],tot,n,m,c,d[N*3]; void add(int u,int v,int w){ edge[tot].v=v; edge[tot].w=w; edge[tot].next=head[u]; head[u]=tot++; } priority_queue<Edge>q; bool vis[N*3]; int dij(int s,int t){ for(int i=1;i<=n;++i)d[i]=INF,vis[i]=0; d[s]=0,q.push(Edge{s,0,0}); while(!q.empty()){ while(!q.empty()&&vis[q.top().v])q.pop(); if(q.empty())break; int u=q.top().v; q.pop(); vis[u]=1; for(int i=head[u];~i;i=edge[i].next){ int v=edge[i].v; if(!vis[v]&&d[v]>d[u]+edge[i].w){ d[v]=d[u]+edge[i].w; q.push(Edge{v,d[v],0}); } } } return d[t]==INF?-1:d[t]; } vector<int>g ; int main(){ int T,cas=0; scanf("%d",&T); while(T--){ scanf("%d%d%d",&n,&m,&c); for(int i=1;i<=n;++i)g[i].clear(); for(int i=1;i<=n;++i){ int x; scanf("%d",&x); g[x].push_back(i); } memset(head,-1,sizeof(head)); tot=0; for(int i=1;i<=m;++i){ int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,w),add(v,u,w); } for(int i=1;i<=n;++i){ if(!g[i].size())continue; if(i>1&&g[i-1].size()) add(n+i,2*n+i-1,c); if(i<n&&g[i+1].size()) add(n+i,2*n+i+1,c); for(int j=0;j<g[i].size();++j) add(g[i][j],i+n,0),add(i+2*n,g[i][j],0); } n*=3; printf("Case #%d: %d\n",++cas,dij(1,n/3)); } return 0; }
View Code
相关文章推荐
- Windows平台安装OpenCV-2.4.9,利用Eclipse、MinGW构建C++调用OpenCV开发环境
- java关键字浅析
- think python学习心得-(5)迭代与字符串的使用
- 2.四则运算03
- mysqlbinlog 查看具体的sql语句 (binlog_format=row模式)
- [面试] C/C++ 语法细节拾遗
- 第一个多边形
- 【Educational Codeforces Round 10B】【简单脑洞】z-sort 数列重排 奇小偶大
- Jackson实现Object对象与Json字符串的互转
- 如何获取短信信息(二)
- 浅谈Mental Ray渲染引擎并行性机制
- 导航栏透明
- 单元测试(2)
- (java) 四则运算(三)
- SQL语句删除所有表
- drawAtPoint和drawInRect的区别是后一个可以自动换行
- IMF百日大喜超大活动
- 定义静态的方法
- HtmlUnit、httpclient、jsoup爬取网页信息并解析
- python中的函数式编程——apply, filter, map, reduce