• 4080 Warfare And Logistics


    http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2081

    解题:很暴力的spfa

    压线过了。。

    View Code
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<vector>
    #include<queue>
    #include<cstring>
    #define maxn 2500
    using namespace std;
    //const int maxn=10000;
    //typedef pair<int,int >pii;
    //typedef pair<pii,int>pp;
    //vector<pp>mm[maxn];
    int n,m,L;
    typedef long long ll;
    int dis[maxn];
    int head[maxn];
    struct node0
    {
        int v;
        int next;
        int c;
    }node[maxn];
    int visit[maxn];
    int sum;
    void add(int u,int v,int c)
    {
        sum++;
        node[sum].next=head[u];  head[u]=sum;
        node[sum].v=v;
        node[sum].c=c;
    }
    ll spfa(int s,int id)
    {
        for(int i=1;i<=n;i++)
            dis[i]=L;
        memset(visit,0,sizeof(visit));
        dis[s]=0;
        //visit[s]=1;
        queue<int>q;
        q.push(s);
        while(!q.empty())
        {
            int v=q.front();
            q.pop();
            visit[v]=0;
            for(int i=head[v];i!=-1;i=node[i].next)
            //if(mm[v][i].second!=id)
            if(i/2!=id)
           // if(dis[mm[v][i].first.first]>mm[v][i].first.second+dis[v])
           if(dis[node[i].v]>dis[v]+node[i].c)
            {
    
                    //dis[mm[v][i].first.first]=dis[v]+mm[v][i].first.second;
                    dis[node[i].v]=dis[v]+node[i].c;
                   // if(!visit[mm[v][i].first.first])
                   if(!visit[node[i].v])
                    {
                       //visit[mm[v][i].first.first]=1;
                        //q.push(mm[v][i].first.first);
                         visit[node[i].v]=1;
                        q.push(node[i].v);
    
    
                    }
    
            }
    
        }
        ll ans=0;
        for(int i=1;i<=n;i++)
            ans+=dis[i];
        return ans;
    }
    ll solve(int id)
    {
        ll ans=0;
        for(int i=1;i<=n;i++)
        {
            ans+=spfa(i,id);
        }
        return ans;
    }
    int main()
    {
      //freopen("f:\\1.txt","r",stdin);
        while(scanf("%d%d%d",&n,&m,&L)!=EOF)
        {
            //for(int i=1;i<=n;i++)
           // mm[i].clear();
           memset(head,-1,sizeof(head));
           sum=-1;
            for(int i=1;i<=m;i++)
            {
                int a,b,c;
                scanf("%d%d%d",&a,&b,&c);
                add(a,b,c);
                add(b,a,c);
    
               // mm[a].push_back(pp(pii(b,c),i));
                //mm[b].push_back(pp(pii(a,c),i));
            }
            ll ans1,ans2,temp;
            ans1=solve(-1);
            ans2=ans1;
            for(int i=0;i<m;i++)
            {
                temp=solve(i);
                if(temp>ans2)
                    ans2=temp;
            }
            printf("%lld %lld\n",ans1,ans2);
        }
      // fclose(stdout);
        return 0;
    }
  • 相关阅读:
    C# 英语纠错 LanguageTool
    WPF TreeView 虚拟化-设置滚动到选中项
    C# 同步更新系统时间
    C# 重置IE安全等级
    C# IE环境
    C# IE环境
    WPF ObservableCollection 异步调用问题
    C# 以函数Action/Func/Task作为方法参数
    WPF Geometry 引用Path数据
    ResourceDictionary主题资源替换(一) :通过加载顺序来覆盖之前的主题资源
  • 原文地址:https://www.cnblogs.com/cs1003/p/2712548.html
Copyright © 2020-2023  润新知