bzoj1579&luogu2939 [USACO09FEB]改造路Revamping Trails

原创 2018年04月14日 23:39:01

http://www.elijahqi.win/archives/797
题目描述

Farmer John dutifully checks on the cows every day. He traverses some of the M (1 <= M <= 50,000) trails conveniently numbered 1..M from pasture 1 all the way out to pasture N (a journey which is always possible for trail maps given in the test data). The N (1 <= N <= 10,000) pastures conveniently numbered 1..N on Farmer John’s farm are currently connected by bidirectional dirt trails. Each trail i connects pastures P1_i and P2_i (1 <= P1_i <= N; 1 <= P2_i <= N) and requires T_i (1 <= T_i <= 1,000,000) units of time to traverse.

He wants to revamp some of the trails on his farm to save time on his long journey. Specifically, he will choose K (1 <= K <= 20) trails to turn into highways, which will effectively reduce the trail’s traversal time to 0. Help FJ decide which trails to revamp to minimize the resulting time of getting from pasture 1 to N.

TIME LIMIT: 2 seconds

约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体.

通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 速公路.在高速公路上的通行几乎是瞬间完成的,所以高速公路的通行时间为0.

请帮助约翰决定对哪些小径进行升级,使他每天早上到牧场W花的时间最少.输出这个最少 的时间.

输入输出格式

输入格式:

Line 1: Three space-separated integers: N, M, and K
Lines 2..M+1: Line i+1 describes trail i with three space-separated integers: P1_i, P2_i, and T_i
输出格式:

Line 1: The length of the shortest path after revamping no more than K edges
输入输出样例

输入样例#1:

4 4 1
1 2 10
2 4 10
1 3 1
3 4 100
输出样例#1:

1
说明

K is 1; revamp trail 3->4 to take time 0 instead of 100. The new shortest path is 1->3->4, total traversal time now 1.

基本同jloi2011飞行路线

注意数据范围是long long

#include<cstdio>
#include<queue>
#include<vector>
#define N 11000
#define M 55000
using namespace std;
#define pa pair<int,pair<int,int> >
#define inf 1LL<<60;
inline int read(){
    int x=0;char ch=getchar();
    while (ch<'0'||ch>'9') ch=getchar();
    while (ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}
    return x;
}
struct node{
    int y,z,next;
}data[M<<1];
priority_queue<pa,vector<pa>,greater<pa> >q;
long long f[N][22];
int h[N],n,m,k,num;
bool flag[N][22];
inline long long min(long long x,long long y){
    return x<y?x:y;
}
void dijkstra(){
    for (int i=1;i<=n;++i) 
        for (int j=0;j<=k;++j) f[i][j]=inf;
    q.push(make_pair(0,make_pair(1,0)));f[1][0]=0;
    while (!q.empty()){
        int x=q.top().second.first,level=q.top().second.second;q.pop();
        if(flag[x][level])continue;else flag[x][level]=true;
        for (int i=h[x];i;i=data[i].next){
            int y=data[i].y,z=data[i].z;
            if (f[x][level]+z<f[y][level]){
                f[y][level]=f[x][level]+z;
                q.push(make_pair(f[y][level],make_pair(y,level)));
            }
            if (level+1<=k&&f[x][level]<f[y][level+1]){
                f[y][level+1]=f[x][level];
                q.push(make_pair(f[y][level+1],make_pair(y,level+1)));
            }
        }
    }
}
int main(){
    freopen("2939.in","r",stdin);
    n=read();m=read();k=read();
    for (int i=1;i<=m;++i){
        int x=read(),y=read(),z=read();
        data[++num].y=y;data[num].z=z;data[num].next=h[x];h[x]=num;
        data[++num].y=x;data[num].z=z;data[num].next=h[y];h[y]=num;
    }
    dijkstra();
    long long ans=inf;
    for (int i=0;i<=k;++i) ans=min(ans,f[n][i]);
    printf("%lld",ans);
    return 0;
}
版权声明:辣鸡蒟蒻的blog https://blog.csdn.net/elijahqi/article/details/79945712

BZOJ1597 [Usaco2009 Feb]Revamping Trails 道路升级

分层图分K层,层之间是升级道路,跑最短路就行了 据说卡spfa
  • neither_nor
  • neither_nor
  • 2016-08-16 15:01:37
  • 747

[Usaco2009 Feb]Revamping Trails 堆优化 Dijkstra

。。 这题一眼就看出就是一个二维DP dp[i][j]表示到点i使用了j次免费边的最短距离 MD 卡SPFA。。 遂写dij。 AC #include #include...
  • sdj222555
  • sdj222555
  • 2013-10-10 00:20:50
  • 1753

USACO 2009 Feb Revamping Trails 道路翻新

这道题不妨借用一下动态规划的思路,把一个点拆成k+1(max是20)个点来做,对于所有的点ui分别和vi与vi+1相连。 详见代码: #include const int maxn = 100...
  • u012316656
  • u012316656
  • 2014-02-05 00:00:19
  • 881

TOJ 2609 Revamping Trails -- dp

题目:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2609 分析:用dp[i][j]表示...
  • randygx
  • randygx
  • 2014-05-16 15:23:39
  • 379

【USACO】2009 Feb Revamping Trails 道路翻新

Revamping Trails 道路翻新 Description 农场里有N个牛棚,编号为1到N。它们之间由M条双向道路连接,第i条道路连接的牛棚为P1iP1_i和P2iP2_i,通行时间为TiT_...
  • Bobby_Z
  • Bobby_Z
  • 2016-10-31 09:33:37
  • 694

BZOJ1579: [Usaco2009 Feb]Revamping Trails 道路升级

题目链接【分析】BZOJ2763加强版。。先用spfaT掉了。加优化的dij很快。【代码】#include #include #include #include #include #incl...
  • Ep1C_HeReT1c
  • Ep1C_HeReT1c
  • 2016-12-29 15:01:11
  • 324

bzoj1579 [Usaco2009 Feb]Revamping Trails 道路升级(分层图最短路)

根bzoj2763一模一样。
  • Icefox_zhx
  • Icefox_zhx
  • 2017-09-08 07:44:08
  • 170

P2939 [USACO09FEB]改造路Revamping Trails(迪杰斯特拉+堆优化)

约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体.通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 速公路.在...
  • Jackleg
  • Jackleg
  • 2017-11-05 19:05:49
  • 115

FZU 1009 Jogging Trails 最短路+欧拉回路 解题报告

Problem Description Gord is training for a marathon. Behind his house is a park with a large network...
  • qq_21899803
  • qq_21899803
  • 2016-06-07 18:19:41
  • 677

BZOJ 1579 Revamping Trails

题目链接http://www.zybbs.org/JudgeOnline/problem.php?id=1579某小朋友给的题,无奈不会做。T T。后来一问知道是用动态规划,搜了下,感觉好神奇。两种方...
  • zxy_snow
  • zxy_snow
  • 2011-07-17 18:59:20
  • 1586
收藏助手
不良信息举报
您举报文章:bzoj1579&luogu2939 [USACO09FEB]改造路Revamping Trails
举报原因:
原因补充:

(最多只允许输入30个字)