• OpenJudge Trans


    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<vector>
    #include<set>
    #include<queue>
    #include<map>

    using namespace std;

    const int inf=(int)1E9,maxT=100+1,maxn=20,maxm=1000;
    int T,n,k,m,Fuck[1010][1010];
    struct Edge
    {
    int t,c;
    Edge*next;
    Edge(int _t,int _c,Edge*_n):t(_t),c(_c),next(_n){}
    }*E[maxn]={0};
    struct Vertex
    {
    int D[maxT];
    Vertex(){memset(D,0,sizeof(D));}
    void Ins(int l,int r)
    {
    for(int i=l;i<=r;i++) D[i]=1;
    }
    void Set()
    {
    for(int i=1;i<=T;i++) D[i]+=D[i-1];
    }
    bool ok(int l,int r)
    {
    return D[r]==D[l-1];
    }
    }V[maxn];
    void InsEdge(int s,int t,int c)
    {
    E[s]=new Edge(t,c,E[s]);
    E[t]=new Edge(s,c,E[t]);
    }
    void Init()
    {
    memset(Fuck,-1,sizeof(Fuck));
    cin>>T>>n>>k>>m;int s,t,c;
    while(m--)
    {
    scanf("%d %d %d",&s,&t,&c);
    InsEdge(s-1,t-1,c);
    }
    int p,a,l,r;cin>>p;
    while(p--)
    {
    scanf("%d %d %d",&a,&l,&r);
    V[a-1].Ins(l,r);
    }
    for(int i=0;i<n;i++)V[i].Set();
    }
    int Cost(int l,int r)
    {
    if(Fuck[l][r]!=-1) return Fuck[l][r];
    static int dist[maxn];
    static bool inq[maxn];
    for(int i=0;i<n;i++) dist[i]=inf,inq[i]=false;
    queue<int> Q;
    Q.push(0);inq[0]=true;dist[0]=0;
    while(Q.size())
    {
    int t=Q.front();Q.pop();inq[t]=false;int cost=dist[t];
    for(Edge*e=E[t];e;e=e->next)
    {
    int ncost=cost+e->c,v=e->t;
    if(!V[v].ok(l,r))continue;
    if(dist[v]>ncost)
    {
    dist[v]=ncost;
    if(!inq[v]) Q.push(v),inq[v]=true;
    }
    }
    }
    return Fuck[l][r]=dist[n-1];
    }
    int dp[maxT];
    void Work()
    {
    dp[0]=0;
    for(int i=1;i<=T;i++)
    {
    dp[i]=inf;
    for(int j=i-1;j>=0;--j)
    {
    int c=Cost(j+1,i);
    if(c==inf)break;
    dp[i]=min(dp[i],dp[j]+c*(i-j)+k);
    }
    }
    cout<<dp[T]-k<<endl;
    }
    int main()
    {
    //freopen("trans.in","r",stdin);
    Init();
    Work();
    }

  • 相关阅读:
    文件隐藏在一张图片里
    晶振
    主宰全球的10大算法
    java+mysql连接的优化
    排序剔除
    js数据类型
    字符实体
    表单
    定义样式表
    布局相关的属性
  • 原文地址:https://www.cnblogs.com/JackSlowFuck/p/3713592.html
Copyright © 2020-2023  润新知