社区讨论
萌新不是刚学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 条回复,欢迎继续交流。
正在加载回复...