⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 problem_roads.cpp

📁 ACM中南大学 H道路的算法
💻 CPP
字号:
//Algorithm : DFS+Cut 
//2005-10-6
#include <stdio.h>
#include <string.h>
const int M=10001,N=101,maxN=1000000000;
struct Node{
    int d,l,t;
}es[M];
int e[N][101],top[N],n,k,min=maxN,minLen[N][M];

void dfs(int v,int k,int len){
    int i;
    if (k<0 || len >= min || len>=minLen[v][k]) return ;
    if (v==n-1){
        min=len;
        return ;
    }    
    else{        
        for (i=0;i<=k;i++){
            if (len<minLen[v][i]) minLen[v][i]=len;
        
        }    
        for (i=0;i<top[v];i++){
            dfs(es[e[v][i]].d, k - es[e[v][i]].t,len + es[e[v][i]].l);
        }    
    }    
}    
int main(){
    int i,r;
    scanf("%d%d%d",&k,&n,&r);
    memset(top,0,sizeof(top));
    memset(minLen,1,sizeof(minLen));
    for (i=0;i<r;i++){
        int s;
        scanf("%d%d%d%d",&s,&es[i].d,&es[i].l,&es[i].t);
        s--; es[i].d--;
        e[s][top[s]]=i;
        top[s]++;
    }  
    dfs(0,k,0);
    
    if (min!=maxN) printf("%d\n",min);
    else printf("-1\n");
    return 0;
}    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -