<最短路模板> 热浪
来源:互联网 发布:js除法取整不四舍五入 编辑:程序博客网 时间:2024/06/16 21:45
go to the problem
模板题还写什么题解QWQ
dijkstra(贪心)
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;int t,c,ts,te,rs,re;int a[3000][3000];int d[3000];bool used[3000];const int inf=1047483647; int main(){ cin>>t>>c>>ts>>te; for(int i=1;i<=t;++i) for(int j=1;j<=t;++j) a[i][j]=inf; for(int i=1;i<=c;++i) { cin>>rs>>re; cin>>a[rs][re]; a[re][rs]=a[rs][re]; } memset(d,63,sizeof(d)); d[ts]=0; for(int j=1;j<=t;++j) { int sum=inf,k=0; for(int i=1;i<=t;++i) // 找出未被弹出的d最小的点 { if((!used[i])&&(d[i]<sum)) { sum=d[i]; k=i; } } if(k==0) break; for(int i=1;i<=t;++i) 用这个点去更新其他点 { if(d[k]+a[k][i]<d[i]) d[i]=d[k]+a[k][i]; } used[k]=true; } cout<<d[te]; return 0;}
dijkstra+堆优化
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std;int T,C,f,t,d,ts,te,cnt;int first[2510],next[13000],de[2510];bool used[2510];struct maple{ int f,t,d;}Rode[13000];struct Edge{ int f,d; bool operator <(const Edge &a)const{ return a.d<d; }};priority_queue<Edge> q;void build(int f,int t,int d){ Rode[++cnt]=(maple){ f,t,d}; next[cnt]=first[f]; first[f]=cnt;}int main(){ scanf("%d%d%d%d",&T,&C,&ts,&te); for(int i=1;i<=C;++i) { scanf("%d%d%d",&f,&t,&d); build(f,t,d); build(t,f,d); } q.push((Edge){ ts,0 }); memset(de,63,sizeof(de)); de[ts]=0; while(!q.empty()) { Edge a=q.top(); q.pop(); while(!q.empty()&&used[a.f]) a=q.top(),q.pop(); used[a.f]=1; if(a.f==te) { cout<<a.d; break; } for(int i=first[a.f];i;i=next[i]) if(!used[Rode[i].t]&&a.d+Rode[i].d<de[Rode[i].t]) { de[Rode[i].t]=a.d+Rode[i].d; q.push((Edge){Rode[i].t,de[Rode[i].t]}); } } return 0;}
SPFA
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>using namespace std;const int MAXN=100010;int T,C,ts,te,cnt,x,y,z;int first[MAXN],next[MAXN],de[MAXN];bool used[MAXN];struct Edge{ int f,e,d;}rode[MAXN];queue<int> q;void build(int f,int t,int d){ rode[++cnt]=(Edge){ f,t,d}; next[cnt]=first[f]; first[f]=cnt;}void go(){ while(!q.empty()) q.pop(); q.push(ts); de[ts]=0; used[ts]=1; while(!q.empty()) { int v=q.front(); q.pop(); used[v]=0; for(int i=first[v];i!=-1;i=next[i]) { int u=rode[i].e; if(de[u]>(de[v]+rode[i].d)) { de[u]=de[v]+rode[i].d; if(!used[u]) { q.push(u); used[u]=1; } } } }}int main(){ memset(first,-1,sizeof(first)); memset(next,-1,sizeof(next)); memset(used,0,sizeof(used)); memset(de,63,sizeof(de)); scanf("%d%d%d%d",&T,&C,&ts,&te); for(int i=1;i<=C;++i) { scanf("%d%d%d",&x,&y,&z); build(x,y,z); build(y,x,z); } go(); printf("%d",de[te]); return 0;}
阅读全文
0 0
- <最短路模板> 热浪
- 洛谷1339 热浪(最短路模板)
- codevs 1557 热浪(最短路【模板】)
- 【最短路】CODE[VS] 1557 热浪 (Dijkstra模板)
- tyvj 1031 热浪(最短路)
- 洛谷1339 热浪 最短路
- 最短路经典例题 codevs 1557 热浪
- 最短路算法 codevs 1557 热浪
- codevs 1557 热浪 SPFA 最短路
- [USACO09OCT]热浪Heat Wave 洛谷 1339 最短路
- bzoj 3408: [Usaco2009 Oct]Heat Wave 热浪 最短路
- 洛谷 1339 [USACO09OCT]热浪Heat Wave 最短路
- 最短路模板
- 最短路模板
- poj1125最短路模板
- 最短路 SPFA模板
- 最短路 kruskal模板
- 最短路 dijkstra模板
- 基于Spring开发——自定义标签及其解析
- tomcat 上传超出限制的大文件的时候,无响应,服务器端有限制大小
- C_笔记整理_2
- Unity简单的单例实例
- 带父标签的自定义标签
- <最短路模板> 热浪
- android 五大布局(3)相对布局
- AngularJs多选框表格全选反选批量删除
- opencv python
- 配置python3的pip3
- Oracle 恢复.bat 出现监听未启动
- extends和implements区别
- Boxes of Chocolates Again UVA
- 泛型单例