zoukankan      html  css  js  c++  java
  • P3125 [USACO15OPEN]Bessie的生日自助餐


    题目是真的长==

    还可以的DP题,就是老是想起来百毒之星TC

    、哭


    #include<bits/stdc++.h>
    using namespace std;
    int ne,head[100000],n,m,a,b,c,e,d[1001][1001],ans=-1,f[1001],vis[1001];
    struct node{int to,nxt;}eg[100000<<1];
    struct nod{int val,tag;}num[100000];
    int cmp(nod x,nod y){return x.val<y.val;}
    void adde(int u,int v){eg[++ne].nxt=head[u];eg[ne].to=v;head[u]=ne;}
    void spfa(int x)
    {
        memset(vis,0,sizeof(vis));
        queue<int>q;
        q.push(x);d[x][x]=0;vis[x]=1;
        while(!q.empty())
        {
            int u=q.front();
            vis[u]=0;
            q.pop();
            for(int i=head[u];i;i=eg[i].nxt)
            {
                int v=eg[i].to;
                if(d[x][v]>d[x][u]+e)
                {d[x][v]=d[x][u]+e;
                if(!vis[v]){q.push(v);vis[v]=1;}}
            }
        }
    }
    int main()
    {
        cin>>n>>e;
        for(int i=1;i<=n;i++)
        {
            cin>>num[i].val>>c;num[i].tag=i;
            while(c--){cin>>a;adde(a,i);adde(i,a);}
        }
        sort(num+1,num+1+n,cmp);
        memset(d,0x3f,sizeof(d));
        for(int i=1;i<=n;i++)spfa(i);
        for(int i=1;i<=n;i++)f[i]=num[i].val;
        for(int i=2;i<=n;i++)for(int j=1;j<i;j++)
        f[i]=max(f[i],f[j]+num[i].val-d[num[j].tag][num[i].tag]);
        for(int i=1;i<=n;i++)
        ans=max(ans,f[i]);
        cout<<ans;
    }
  • 相关阅读:
    C open fopen read fread
    图像混合模式算法
    高级API和低级API
    strcpy_s与strcpy
    IsPowerOfTwo
    透明度算法
    POJ 2240(bellman_ford)
    POJ 1797(dijkstra)
    【转载】POJ 图论题目列表
    POJ 1502(Floyd)
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11419500.html
Copyright © 2011-2022 走看看