0
点赞
收藏
分享

微信扫一扫

CSP 201903-5 317号子任务 暴力30分

妖妖妈 2022-03-12 阅读 34

原题链接CSP 201903-5 317号子任务

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int MAX=10010;
const int INF=1e8;

int n,m,k;
int f[MAX];
struct  node
{
    int v,w;
    node(int _v,int _w)
    {
        v=_v;
        w=_w;
    }
};
vector<int> x[MAX];
vector<node> g[MAX];
int d[MAX];
int vis[MAX];
void dijk(int s)
{
    fill(d,d+MAX,INF);
    memset(vis,0,sizeof(vis));
    d[s]=0;
    for(int i=1;i<=n;i++)
    {
        int u=-1;
        int MIN=INF;
        for(int j=1;j<=n;j++)
        {
            if(vis[j]==0 && d[j]<MIN)
            {
                u=j;
                MIN=d[j];
            }
        }
        if(u==-1)
            return ;
        vis[u]=1;
        for(int j=0;j<g[u].size();j++)
        {
            int v=g[u][j].v;
            if(vis[v]==0 && d[u]+g[u][j].w<d[v])
            {
                d[v]=d[u]+g[u][j].w;
            }
        }
    }
}
int main()
{
    std::ios::sync_with_stdio(false);
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>f[i];
    }
    while(m--)
    {
        int u,v,w;
        cin>>u>>v>>w;
        g[u].push_back(node(v,w));
        g[v].push_back(node(u,w));
    }
    for(int i=1;i<=n;i++)
    {
        dijk(i);
        ll sum=INF;
        for(int j=1;j<=n;j++)
        {
            if(f[j]==1 && d[j]!=INF)
                x[i].push_back(d[j]);
        }
        sort(x[i].begin(),x[i].end());
        ll tmp=0;
        if(x[i].size()>=k)
        {
            for(int j=0;j<k;j++)
            {
                tmp+=x[i][j];
            }
        }
        else
        {
            for(int j=0;j<x[i].size();j++)
            {
                tmp+=x[i][j];
            }
        }
        sum=min(sum,tmp);
        cout<<sum<<endl;
    }
    return 0;
}

举报

相关推荐

0 条评论