JSK-习题:圣诞树-最短路-特殊生成树

这里写图片描述

思路:

树的总价就是 每个结点的权值*到该点的最短路

代码:

#include <iostream>
#include <string.h>
#include <set>
using namespace std;
const int MAX_N=100000;
const int MAX_M=100000;
const long long INF=0x3f3f3f3f;
struct edge
{
    int v,w,next;
}e[MAX_M];
int p[MAX_N],eid,n;
void init()
{
    memset(p,-1,sizeof(p));
    eid=0;
}
void insert(int u,int v,int w)
{
    e[eid].v=v;
    e[eid].w=w;
    e[eid].next=p[u];
    p[u]=eid++;
}
void addedge(int u,int v,int w)
{
    insert(u,v,w);
    insert(v,u,w);
}
typedef pair<int ,int >PII;
set<PII,less<PII> >min_heap;
set<PII,less<PII> >::iterator iter;
int dist[MAX_N];
bool vst[MAX_N];
bool dijkstra(int s)
{
    memset(dist,INF,sizeof(dist));
    memset(vst,0,sizeof(vst));
    min_heap.insert(make_pair(0,s));
    dist[s]=0;
    for(int i=0;i<n;i++)
    {
        if(min_heap.size()==0)
            return false;
        iter=min_heap.begin();
        int v=iter->second;
        min_heap.erase(*iter);
        vst[v]=true;
        for(int j=p[v];j!=-1;j=e[j].next)
        {
            int x=e[j].v;
            if(!vst[x] && dist[v]+e[j].w<dist[x])
            {
                min_heap.erase(make_pair(dist[x],x));
                dist[x]=dist[v]+e[j].w;
                min_heap.insert(make_pair(dist[x],x));
            }
        }
    }
    return true;
}
int main()
{
    int m;
    while(cin>>n>>m)
    {
        init();
        int point_val[MAX_N];
        for(int i=1;i<=n;i++)
        {
            cin>>point_val[i];
        }
        int u,v,w;
        for(int i=0;i<m;i++)
        {
            cin>>u>>v>>w;
            addedge(u,v,w);
        }
        dijkstra(1);
        long long ans=0;
        int flag=0;
        for(int i=1;i<=n;i++)
        {
            if(dist[i]==INF)
            {
                flag=1;
                break;
            }
            ans+=dist[i]*point_val[i];
        }
        if(flag)
            cout<<"No Answer"<<endl;
        else
            cout<<ans<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43093481/article/details/82319061
今日推荐