求条,玄关
查看原帖
求条,玄关
1029122
Fish_redflying楼主2024/12/28 15:00
#include<bits/stdc++.h>
#define inf 0x7ffffff

using namespace std;

struct Edge {int to,nxt,val;} 
    edge[114514];
struct node {
	int dis,pos;
	bool operator<(const node &other) const {
		return other.dis<dis;
	}
};

priority_queue<node> q[1145];
node tmp;

int p,f,c,u,v,w,cnt;
int dis,pos,child,tot;
int ansm,ansi;
int Dis[505][114514],vis[505][114514];
int head[114514];
int F[114514];
bool check[114514];

void add(int u,int v,int w) {
    cnt++;
    edge[cnt].to=head[u];
    edge[cnt].nxt=u;
    edge[cnt].val=w;
    head[u]=cnt;
}

void Dijkstra(int s) {
    Dis[s][s]=0;
	q[s].push({0,s});
	while(!q[s].empty()) {
		tmp=q[s].top(),q[s].pop();
		pos=tmp.pos,dis=tmp.dis;
		if (vis[s][pos]) continue;
		vis[s][pos]=1;
		cout<<pos<<endl;
		for(int i=head[pos];i!=0;i=edge[i].nxt) {
			child=edge[i].to;
			cout<<Dis[s][child]<<endl;
			if (Dis[s][child]>Dis[s][pos]+edge[i].val) {
				Dis[s][child]=Dis[s][pos]+edge[i].val;
				if (vis[s][child]==0) 
					q[s].push((node){Dis[s][child],child});
			}
		}
	}	
}

int main()
{
    cin>>p>>f>>c;
    for(int i=0;i<f;i++) {
        cin>>F[i];
        check[F[i]]=1;
    }
    for(int i=0;i<p;i++) {
        for(int j=0;j<p;j++) {
            Dis[i][j]=inf;
        }
    }
    for(int i=0;i<c;i++) {
        cin>>u>>v>>w;
        add(u,v,w);
        add(v,u,w);
    }
    ansm=inf;
    for(int i=1;i<=p;i++) {
        if (check[i]) continue;
        Dijkstra(i);
        //cout<<1<<endl;
        for(int j=0;j<f;j++) {
            tot+=Dis[i][F[i]];
        }
        if (tot<ansm) {
            ansi=i;
            ansm=tot;
        }
    }
    cout<<ansi;
}

一直循环,输出不了。。

2024/12/28 15:00
加载中...