poj 3159 Candies dijkstra + queue
2024-08-30 17:19:58
题目链接:
题目大意:
飞天鼠是班长,一天班主任买了一大包糖果,要飞天鼠分发给大家,班里面有n个人,但是学生A认为学生B比自己多的糖果数目不应该大于c,如果不满足自己的条件,学生A就会向老师告状,在这个班级里面泰迪熊的编号是1,班长的编号是n,班长想和泰迪熊的糖果相差最大,问:在满足m个学生的要求后,班长与泰迪熊的糖果相差最大是多少?
解题思路:
差分约束系统,|Xa-Xb| <= c,我们假设Xa小于Xb,把糖果的最大差当成边权,因为要满足全部人的要求,也就是要求所建图的最短路,用spfa+queue优化tle了,然后我就用了dijkstra+优先队列。感觉用邻接表+优先队列对dijkstra优化真是太美妙了,省去了很多的无用枚举,但是dijkstra的先天不足还是没有办法挽救~~~~
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 30010 struct Edge
{
int e, w;
Edge(int e=, int w=) : e(e),w(w) {}
}; bool operator < (const Edge &a, const Edge &b)
{
return a.w > b.w;//dist小的优先级高
} vector< vector<Edge> > G;//二维vector
//vector<Edge>G[maxn]要比前者慢,估计申请空间需要的时间也比较可观
bool vis[maxn];
int n; void dijkstra(); int main ()
{
int m;
while (scanf ("%d %d", &n, &m) != EOF)
{
G.clear();
G.resize(n+);//动态申请空间
while (m --)
{
int a, b, s;
scanf ("%d %d %d", &a, &b, &s);
G[a].push_back(Edge(b, s));
}
dijkstra ();
}
return ;
} void dijkstra()
{
priority_queue<Edge>Q;
Edge p, q;
memset (vis, false, sizeof(vis));
p.e = , p.w = ;
Q.push (p); while (!Q.empty())
{
p = Q.top();//选取最优点
Q.pop();
if (vis[p.e])//已求出最短路,进行下一个
continue; if (p.e == n)//已求出1到n的最短路
break;
vis[p.e] = true;
int len = G[p.e].size(); for (int i=; i<len; i++)
{
q = G[p.e][i];
if ( !vis[q.e] )//对剩余的点进行松弛操作
{
q.w += p.w;
Q.push(q);
}
}
}
printf ("%d\n", p.w);
}
最新文章
- Jvascript简介
- java语言的I/O操作预习
- IOS GCD定时器
- Java—Servlet开发
- Type.GetField 修改类中私有字段。
- C#文件复制功能
- jquery 绑定省份和城市
- Android 属性动画(二)
- Linux下终端利器tmux(转)
- crontab 添加sh文件定时
- salesforce 零基础学习(六十六)VF页面应善于使用变量和函数(二)常用函数的使用
- fprintf&;prinft&;sprintf
- express学习之session
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习7
- [转]Python中__repr__和__str__区别
- CROSSUI桌面工具 分布加载模块(Distributed UI Module) 与 主模块Module 之间数据传输!
- FFT(Rock Paper Scissors Gym - 101667H)
- mysql 合理创建索引
- SpringMVC开发小结
- django中日志配置
热门文章
- eclipse工程设置项目jre
- ZXing 二维码解析生成工具类
- datasnap中间件如何控制长连接的客户端连接?
- Excel小tips - 如何实现多列成绩统一排名
- curl -s 不输出统计信息
- 鼠标放上去Div旋转特效代码
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- Coding Ninja 修炼笔记 (1)
- 【iOS系列】-UIScrollView的介绍及结合UIPageControl实现图片播放的实例
- 电子设计省赛--PID