poj3159 Candies(差分约束,最短路)
来源:互联网 发布:工商局网络交易平台 编辑:程序博客网 时间:2024/05/06 15:09
题意:n个人,m个信息,每行的信息是3个数字,A,B,C,表示B比A多出来的糖果不超过C个,问你,n号人最多比1号人多几个糖果
思路:对应最短路模型,在松弛完最短路后则变为 d[v] <= d[u] + w ,转化为 d[v] - d[u] <= w,这个和上面的 B - A <= C 是相同的模式 , 因此建图的时候A和B连一条有向边 , 边权为C,以1为起点,n为终点跑一遍最短路即可
吐槽1:用spfa+queue超时..得改用stack,用刘汝佳的紫书上的dijkstra+优先队列模板也会超时,要改用数组实现的邻接表可以过
吐槽2: 想了一下觉得因为题目有150000条边,会不会因为vector预留没那么多,所以在运行的时候又重新开辟了新的空间全部复制过去导致超时呢,后来尝试用了一下reserve函数给vector预留了这么多空间还是TLE...放弃了..
#include <iostream>#include <string.h>#include <stdio.h>#include <algorithm>#include <queue>#include <vector>using namespace std;/* * 使用优先队列优化Dijkstra算法 * 复杂度O(ElogE) * 注意对vector<Edge>E[MAXN]进行初始化后加边 */const int INF=0x3f3f3f3f;const int MAXN=30010;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; int next;};Edge edge[200000];int tol;int head[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=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; int cost=edge[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){ edge[tol].v=v; edge[tol].cost=w; edge[tol].next=head[u]; head[u]=tol++;}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout); int n,m; while(scanf("%d%d",&n,&m)==2) { tol=0; memset(head,-1,sizeof(head)); int A,B,C; while(m--) { scanf("%d%d%d",&A,&B,&C); addedge(A,B,C); } Dijkstra(n,1); printf("%d\n",dist[n]); } return 0;}
题目
0 0
- poj3159 Candies 最短路&差分约束
- poj3159 Candies(差分约束,最短路)
- poj3159 Candies(查分约束最短路)
- poj3159 Candies(差分约束入门)
- POJ3159 Candies(差分约束)
- POJ3159:Candies(差分约束)
- poj3159--Candies(差分约束)
- Candies-POJ3159差分约束
- 差分约束 poj3159 Candies
- poj3159 {差分约束系统—>最短路)
- POJ 3159 Candies(spfa最短路,差分约束)
- poj3159——Candies(差分约束+SPFA堆栈)
- POJ3159 Candies(差分约束+SPFA的栈实现)
- 【差分约束系统】Candies POJ3159
- poj3159 Candies--单源最短路径&差分约束
- poj3159-Candies差分约束-spfa+栈
- 【POJ3159】Candies-差分约束系统
- 【差分约束系统】POJ3159[Candies]题解
- ViewPager中第一项和最后一项实现事件响应
- Android ActionBar中CustomView的显示
- oracle数据库用户创建及授权 导入 导出 删除用户 表空间
- Caused by: java.io.IOException: Filesystem closed的处理
- poj1860 Currency Exchange floyd判断正环 (手动翻译)
- poj3159 Candies(差分约束,最短路)
- LaTex 单栏样式模板中插入双栏表格
- git中本地与远程库的关联与取消
- 【读书有感】——你只是看起来很努力
- BestCoder Round #69-Baby Ming and Weight lifting(暴力)
- 线程_死锁_生产者消费者模式(信号灯法)_任务调度JAVA180-182
- Django项目让本地和服务器环境数据库配置自动切换
- 人脸识别起步
- hdu 2844 coins 多重背包