POJ 3662 图论 最短路特殊建模 2方法
(2010-09-28 09:16:54)
标签:
poj3662图论最短路特殊建模2方法it |
分类: 图论 |
题目描述:无向图,n个节点,m条边(有边权),让你选择一些边把1号节点和n号节点连接起来。其中,k(0<=k<n)条边是免费的,你所选择的超出k条边的边中最大边权就是你的话费。问最小花费是多少。
解题报告:
方法1:
二分枚举花费,小于等于这个花费的边权赋值为0,否则赋值为1。
求1~n的最短路,如果> k不符合,<=k符合
方法2:
限制条件最短路:二维dij
d[i][j]表示在j号节点用了i次免费的最少花费是多少。
转移:nowi,nowj是当前的状态,to, value是nowi,nowj状态出边的节点和边权。
d[nowi][to] = max(d[nowi][nowj], v al)
d[nowi + 1][to] = d[nowi][nowj])
代码如下(方法2):
#include<iostream>#include<queue>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
struct edge{int to, val, next;}e[200001];
int n, p, k, v[1301], d[1301][1301], cnt;
bool vst[1301][1301];
void insert(int from, int to, int val)
{
}
struct pint
{
};
int main()
{