首页 > 其他 > 详细

free

时间:2019-07-28 09:16:36      阅读:66      评论:0      收藏:0      [点我收藏+]

free

终于会这题了QAQ

有些边可以变为0,得用dp做,亏我还妄想贪心来着

写个dijk也能出锅---

dp[i][j] i到起点把其中j条边变为0的最小代价==

?#include<bits/stdc++.h>
using namespace std;
int n,m,S,T,K;
int A[3003][3005];
#define INF 100000099
int dp[3003][3005];
#define P pair<int,int>
priority_queue<P,vector<P>,greater<P> >pq;
void dijk()
{
    for(int i=1; i<=n; i++)
    {

        for(int j=0; j<=K; j++)
        {
            dp[i][j]=INF;
            if(i==S)dp[i][j]=0;
        }
        //cout<<i<<" "<<dp[S][0]<<endl;
        
        //if(i==0)cout<<dp[S][i]<<endl;
    }
    //cout<<dp[S][1]<<endl;
    pq.push(P(0,S));
    while(!pq.empty())
    {
        P a=pq.top();
        pq.pop();
        int x=a.first;
        int y=a.second;
        //if(y==T)
        // cout<<y<<endl;
        if(dp[y][0]<x)continue;
        // dp[y][0]=x;///???
        // cout<<y<<" "<<dp[y][0]<<endl;
        for(int i=1; i<=n; i++)
        {
            //cout<<dp[i][0]<<" "<<dp[y][0]<<" "<<A[y][i]<<" NM"<<i<<endl;
            //cout<<(A[y][i]!=0)<<(A[y][i]!=INF)<<(dp[i][0]<dp[y][0]+A[y][i])<<endl;
            if((A[y][i]!=0)&&(A[y][i]!=INF)&&(dp[i][0]>dp[y][0]+A[y][i]))
            {
                // cout<<i<<"???"<<endl;
                dp[i][0]=min(dp[i][0],dp[y][0]+A[y][i]);
                for(int j=1; j<=K; j++)
                    dp[i][j]=min(dp[i][j],min(dp[y][j]+A[i][j],dp[y][j-1]));
                //cout<<"TRE"<<endl;
                pq.push(P(dp[i][0],i));
            }
        }
    }

}
int main()
{
    scanf("%d%d%d%d%d",&n,&m,&S,&T,&K);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
        {
            if(i!=j)A[i][j]=INF;
        }
    }
    int a,b,c;
    for(int i=1; i<=m; i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        A[a][b]=A[b][a]=c;
    }
    int ans=INF;
    dijk();
    for(int i=0; i<=K; i++)
    {
        ans=min(ans,dp[T][i]);
        // cout<<dp[T][i]<<endl;
    }
   
    cout<<ans<<\n;

}

 

free

原文:https://www.cnblogs.com/liulex/p/11257377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!