poj 3635 带花费的Dij+head优化
练习!!
这里主要需要注意的是进队的条件和dp[][]状态的控制,dp[i][j]表示到第i个城市剩余汽油为j的最小花费。
代码:
- #include<iostream>
- #include<queue>
- #include<cstdio>
- #include<cstring>
- #define inf 100000000
- #define MAXN 1200
- #define MAXM 1200
- using namespace std;
- int head[MAXN],price[MAXN],dp[MAXN][120],vis[MAXN][120];
- int temp,n,m;
- struct Node{
- int v,len,next;
- }edge[2*MAXN*10];
- struct Node1{
- int d;
- int u;
- int cost;
- Node1(int x,int y,int z)
- {
- u=x;
- d=y;
- cost=z;
- }
- friend bool operator < (Node1 a,Node1 b)
- {
- return a.cost>b.cost;
- }
- };
- void addEdge(int x ,int y ,int c)
- {
- edge[temp].v=x;
- edge[temp].len=c;
- edge[temp].next=head[y];
- head[y]=temp;
- temp++;
- edge[temp].v=y;
- edge[temp].len=c;
- edge[temp].next=head[x];
- head[x]=temp;
- temp++;
- }
- priority_queue<Node1> que;
- int Dijstra(int s,int t,int c)
- {
- while(!que.empty())que.pop();
- for(int i=0;i<=n;i++)
- {
- for(int j=0;j<=c;j++)
- {
- dp[i][j]=inf;
- }
- }
- memset(vis,0,sizeof(vis));
- dp[s][0]=0;
- que.push(Node1(s,0,0));
- while(!que.empty())
- {
- Node1 b=que.top();
- que.pop();
- int u=b.u;
- int d=b.d;
- int cost=b.cost;
- vis[u][d]=1;
- if(u==t) return cost;
- if(d+1<=c&&!vis[u][d+1]&&dp[u][d+1]>dp[u][d]+price[u])
- {
- dp[u][d+1]=dp[u][d]+price[u];
- que.push(Node1(u,d+1,dp[u][d+1]));
- }
- for(int i=head[u];i!=-1;i=edge[i].next)
- {
- int v;
- v=edge[i].v;
- int len=edge[i].len;
- if(d>=len&&!vis[v][d-len]&&dp[v][d-len]>cost)
- {
- dp[v][d-len]=cost;
- que.push(Node1(v,d-len,cost));
- }
- }
- }
- return -1;
- }
- int main()
- {
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- for(int i=0;i<n;i++)
- {
- scanf("%d",&price[i]);
- }
- memset(head,-1,sizeof(head));
- temp=0;
- for(int i=1;i<=m;i++)
- {
- int v,w,c;
- scanf("%d%d%d",&v,&w,&c);
- addEdge(v,w,c);
- }
- int q;
- scanf("%d",&q);
- while(q--)
- {
- int q1,q2,q3;
- scanf("%d%d%d",&q1,&q2,&q3);
- int ans=Dijstra(q2,q3,q1);
- if(ans!=-1)
- {
- printf("%d\n",ans);
- }
- else
- printf("impossible\n");
- }
- }
- return 0;
- }
poj 3635 带花费的Dij+head优化的更多相关文章
- POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]
题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...
- POJ 3635 Full Tank? 【分层图/最短路dp】
任意门:http://poj.org/problem?id=3635 Full Tank? Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- codeforces 449B Jzzhu and Cities (Dij+堆优化)
输入一个无向图<V,E> V<=1e5, E<=3e5 现在另外给k条边(u=1,v=s[k],w=y[k]) 问在不影响从结点1出发到所有结点的最短路的前提下,最多可以 ...
- poj 3635 Full Tank? ( bfs+dp思想 )
Full Tank? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5857 Accepted: 1920 Descri ...
- dij+堆优化
写这个dij+堆优化的原因是有些地方卡SPFA,只能搞这个: 香甜的奶油: #include<iostream> #include<cstdio> #include<cs ...
- POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]
题目链接:http://poj.org/problem?id=3635 Description After going through the receipts from your car trip ...
- poj 3013 Big Christmas Tree (dij+优先级队列优化 求最短)
模板 意甲冠军:给你一个图,1始终根,每一方都有单价值,每个点都有权重新. 每个边缘的价格值 = sum(后继结点重)*单价方值. 最低价格要求树值,它构成了一棵树n-1条边的最小价值. 算法: 1. ...
- POJ 3171.Cleaning Shifts-区间覆盖最小花费-dp+线段树优化(单点更新、区间查询最值)
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4721 Accepted: 1593 D ...
- poj 1125 Stockbroker Grapevine (dij优化 0ms)
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #defin ...
随机推荐
- python列表反转
使用reverse来让列表反转特别方便, 没事自己写了几种方式 In [59]: def reverse(nums): length = len(nums) for i in range(length ...
- POJ 3259 Wormholes Bellman_ford负权回路
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...
- knockoutjs模板实现树形结构列表
数据结构 /*数据*/ var ko_vue_data=[ { name: "总能耗", number:"0", energyone: 14410, energ ...
- hdu--1316--How Many Fibs?(java大数)
How Many Fibs? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- Exceptionless 本地部署踩坑记录
仅已此文记录 Exceptionless 本地部署所遇到的问题 1.安装ElasticSearch文本 执行elasticsearch目录中的elasticsearch.bat 没有执行成功. 使用命 ...
- Git 深入浅出
如果你是一个开发人员,想用上这个世界上目前最先进的分布式版本控制系统,那么,赶快开始学习吧!(耐心读下去,收获满满) Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git ...
- 研究分析JS中的三种逻辑语句
JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10; ...
- 采用SmartQQ 协议可制作聊天机器人
采用.NET CORE可运行在 Linux . Windows 和 Mac OSX 平台下. SmartQQ可以: 收发文字消息 获取好友.群.讨论组.好友分组和最近会话的列表 SmartQQ不可以: ...
- How to enable your website to public(set up your web server at home)
As a so exciting dream, I would like set up my owned web site which can be accessed anywhere nomatte ...
- WebService/WCF/WebAPI区别
详细描述它们之间的区别,为什么这么选择,尤其是WCF vs WebAPI