POJ 1724 ROADS(二维SPFA)
用STL实现超时了,用普通队列500+,看到spfa,反应太迟钝了。
#include <cstring>
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define INF 0x7fffffff
int d[][];
int first[];
bool in[][];
int q1[];
int q2[];
int t,k,n;
struct node
{
int u,v,w,next,c;
}edge[];
void CL()
{
t = ;
memset(first,-,sizeof(first));
}
void add(int u,int v,int w,int c)
{
edge[t].u = u;
edge[t].v = v;
edge[t].w = w;
edge[t].c = c;
edge[t].next = first[u];
first[u] = t ++;
}
int spfa(int str,int end)
{
int x,y,v,i,j,ans,l,r; for(i = ;i <= end;i ++)
{
for(j = ;j <= k;j ++)
{
in[i][j] = ;
d[i][j] = INF;
}
}
l = r = ;
q1[] = str;
q2[] = ;
in[str][] = ;
d[str][] = ;
while(l <= r)
{
x = q1[l];
y = q2[l];
l ++;
in[x][y] = ;
for(i = first[x];i != -;i = edge[i].next)
{
v = edge[i].v;
if(y + edge[i].c <= k)
{
if(d[v][y+edge[i].c] > d[x][y] + edge[i].w)
{
d[v][y+edge[i].c] = d[x][y] + edge[i].w;
if(!in[v][y+edge[i].c])
{
r ++;
q1[r] = v;
q2[r] = y+edge[i].c;
in[v][y+edge[i].c] = ;
}
}
}
}
}
ans = INF;
for(i = ;i <= k;i ++)
{
ans = min(ans,d[end][i]);
}
return ans;
}
int main()
{
int m,sv,ev,w,c,ans,i;
scanf("%d%d%d",&k,&n,&m);
CL();
for(i = ;i <= m;i ++)
{
scanf("%d%d%d%d",&sv,&ev,&w,&c);
add(sv,ev,w,c);
}
ans = spfa(,n);
if(ans == INF)
printf("-1\n");
else
printf("%d\n",ans);
return ;
}
POJ 1724 ROADS(二维SPFA)的更多相关文章
- 深搜+剪枝 POJ 1724 ROADS
POJ 1724 ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12766 Accepted: 4722 D ...
- poj 2155 matrix 二维线段树 线段树套线段树
题意 一个$n*n$矩阵,初始全为0,每次翻转一个子矩阵,然后单点查找 题解 任意一种能维护二维平面的数据结构都可以 我这里写的是二维线段树,因为四分树的写法复杂度可能会退化,因此考虑用树套树实现二维 ...
- POJ 2019 Cornfields [二维RMQ]
题目传送门 Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7963 Accepted: 3822 ...
- POJ 2155 Matrix(二维树状数组,绝对具体)
Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 20599 Accepted: 7673 Descripti ...
- POJ1722二维spfa+优先队列优化
题意: 给你一个有向图,然后求从起点到终点的最短,但是还有一个限制,就是总花费不能超过k,也就是说每条边上有两个权值,一个是长度,一个是花费,求满足花费的最短长度. 思路: 一开 ...
- DP:Cow Exhibition(POJ 2184)(二维问题转01背包)
牛的展览会 题目大意:Bessie要选一些牛参加展览,这些牛有两个属性,funness和smartness,现在要你求出怎么选,可以使所有牛的smartness和funness的最大,并且这两 ...
- POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)
题意: 有一个n*n的矩阵,初始化全部为0.有2中操作: 1.给一个子矩阵,将这个子矩阵里面所有的0变成1,1变成0:2.询问某点的值 方法一:二维线段树 参考链接: http://blog.csdn ...
- poj 1724 ROADS 最短路
题目链接 n个节点, m条边, 一开始有K这么多的钱, 每条边有len, cost两个属性, 求1到n的最短距离, 花费要小于k. dis数组开成二维的, dis[u][cost]表示到达u花费为co ...
- poj 2155 Matrix (二维树状数组)
题意:给你一个矩阵开始全是0,然后给你两种指令,第一种:C x1,y1,x2,y2 就是将左上角为x1,y1,右下角为x2,y2,的这个矩阵内的数字全部翻转,0变1,1变0 第二种:Q x1 y1,输 ...
随机推荐
- django template中load的作用
某些应用提供自定义标签和过滤器库. 要在一个模板中访问它们, 使用 {% load %} 标签: {% load comments %} {% comment_form for blogs.entri ...
- 【OpenStack】OpenStack系列11之namaspace&openvswitch原理实践
Namespace实现网络隔离与互通 新建ns: ip netns add foo 查看ns: ip netns 查看ns详细配置: ip netns exec foo ip addr 设置ns内部l ...
- 【转】 JSONObject使用方法
随笔- 46 文章- 0 评论- 132 JSONObject简介 本节摘要:之前对JSON做了一次简单的介 绍,并把JSON和XML做了一个简单的比较:那么,我就在想,如果是一个json格式的字 ...
- 【USACO】ariprog
输入 : N M 要找到长度为 N 的等差数列,要求数列中每个数字都可以表达成 a^2 + b^2 的和, 数字大小不超过M^2 + M^2 输出: 等差数列首元素 间隔 (多组答案分行输出) 解题 ...
- centos下安装五笔输入法的教程
[root@ok ~]# yum update [root@ok ~]# yum install ibus-table-chinese-wubi-haifeng 以上两步已经成功!! #yum ins ...
- C#学习笔记---修饰符,this关键字和static关键字
1. C#中类的修饰符: public 表示不限制对该类的访问 protected 表示只能从所在类和所在类派生的子类进行访问 private 只有其所在类才能访问 internal 只有对 ...
- 9.装饰者模式(Decorator Pattern)
using System; namespace ConsoleApplication7 { class Program { static void Main(string[] args) { // 我 ...
- WIN7里为什么没有TELNET,怎么添加
打开控制面板,打开程序和功能,看到左边有个“打开或关闭Windows功能 ,打开找到telnet客户端,把这2项都勾选上,然后确定就可以了 注意,如果只要telnet别人的话,就选telnet客户端. ...
- 封装了get post方法
function g($name, $defaultValue = "") { // php这里区分大小写,将两者都变为小写 $_GET = array_change_key_ca ...
- poj 3517 约瑟夫环
最简单的约瑟夫环,虽然感觉永远不会考约瑟夫环,但数学正好刷到这部分,跳过去的话很难过 直接粘别人分析了 约瑟夫问题: 用数学方法解的时候需要注意应当从0开始编号,因为取余会等到0解. 实质是一个递推, ...