社区讨论

萌新不是刚学OI,不是妹子,也求助!!

P1828[USACO3.2] 香甜的黄油 Sweet Butter参与者 9已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@mi7z219s
此快照首次捕获于
2025/11/21 05:57
4 个月前
此快照最后确认于
2025/11/21 05:57
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define INT 10000000
using namespace std;
struct node
{
	int u,v,w,next;
}e[30000+10];
int n,p,c,num = 0;
int sum[30000+10] = {1},dis[30000+10];
int head[30000+10];
int v[30000+10];
priority_queue<int>q;
void add(int u,int v,int w)
{
	num ++;
	e[num].u = u;
	e[num].v = v;
	e[num].w = w;
	e[num].next = head[u];
	head[u] = num;
}
void SPFA(int s)
{
	for(int i = 1; i <= p;i ++) v[i] = 0;
	for(int i = 1; i <= p; i ++) dis[i] = INT;
	dis[s] = 0;
	q.push(s);
	v[s] = 1;   
	while(!q.empty()) 
	{
		int h = q.top();
		q.pop();
		v[h] = 0;
		for(int i = head[h];i != 0; i = e[i].next) 
		{
			int step = e[i].v;
			if(dis[step] > dis[h] + e[i].w)
			    dis[step] = dis[h] + e[i].w;
			if(v[step] = 0) q.push(step),v[step] = 1;
		}
	}
}
int main()
{
	cin >> n >> p >> c;
	for(int i = 1; i <= n; i ++) 
	{
		int x;
		cin >> x;
		sum[x] ++;
	}
	for(int i = 1; i <= c; i ++)
	{
		int x,y,w;
		cin >> x >> y >> w;
		add(x,y,w);
		add(y,x,w);
	}
	int ans = INT;
	for(int i = 1; i <= p; i ++)
	{
		int tot = 0;
		SPFA(i);
		for(int j = 1; j <= p;j ++)
			tot += sum[j] * dis[j];
		ans = min(ans , tot);
	}
	cout << ans ;
	return 0;
}
10分代码求帮!

回复

10 条回复,欢迎继续交流。

正在加载回复...