萌新刚学OI,调了两天依然0pts求助
查看原帖
萌新刚学OI,调了两天依然0pts求助
735763
_ChongYun_楼主2024/8/25 11:49
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,p,m,d,dp[114514];
bool qwq[3145][3145],now[114514];
struct node{
    int to,nxt,val;
}w[114514];
int h[114514],cnt=0;
void Link(int x,int y,int val){
    ++cnt;
    w[cnt].to=y;
    w[cnt].nxt=h[x];
    w[cnt].val=val;
    h[x]=cnt;
    return ;
}
int dis[1145141];
bool vis[1145141];
queue<int> q;
void SPFA(int st){
    for(int i=1;i<=n;i++) dis[i]=LLONG_MAX;
    for(int i=1;i<=n;i++) vis[i]=false;
    dis[st]=0; vis[st]=true;
    q.push(st);
    while(!q.empty()){
        int x=q.front();
        q.pop();
        vis[x]=false;
        for(int i=h[x];i!=0;i=w[i].nxt){
            int y=w[i].to;
            if(dis[y]>dis[x]+w[i].val&&!now[y]){
                dis[y]=dis[x]+w[i].val;
                if(!vis[y]){
                    q.push(y);
                    vis[y]=true;
                }
            }
        }
    }
    return ;
}
int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<3)+(x<<1)+ch-'0';
        ch=getchar();
    }
    return x*f;
}
signed main(){
    t=read(); n=read(); p=read(); m=read();
    for(int i=1;i<=m;i++){
        int u,v,val;
        u=read(); v=read(); val=read();
        Link(u,v,val);
        Link(v,u,val);
    }
    d=read();
    for(int i=1;i<=d;i++){
        int u,l,r;
        u=read(); l=read(); r=read();
        for(int j=l;j<=r;j++) qwq[j][u]=true;
    }
    for(int i=1;i<=t;i++) dp[i]=LLONG_MAX;
    dp[0]=-p;
    for(int i=1;i<=t;i++){
        for(int j=1;j<=n;j++) now[j]=false;
        for(int j=i;j>=1;j--){
            for(int k=1;k<=n;k++){
                if(qwq[j][k]) now[k]=true;
                SPFA(1);
                if(dis[n]==LLONG_MAX) break;
                dp[i]=min(dp[i],dp[j-1]+(i-j+1)*dis[n]+p);
            }
        }
    }
    printf("%lld\n",dp[t]);
    return 0;
}
2024/8/25 11:49
加载中...