xynuoj 1596: 香甜的黄油

标签: SPFA链表存储
12人阅读 评论(0) 收藏 举报
分类:

最短路问题

注意:

1.使用邻接数组存储会超时,需要使用邻接表。

2.从每一个牧场枚举到各个奶牛的距离,并把他们的最小和保存。


#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string.h>
#include<math.h>
using namespace std;
#define INF 0x3f3f3f
#define MAXN 808
int n,p,c;
struct Edge
{
	int v;
	int cost;
	Edge(int _v = 0, int _cost = 0) : v(_v), cost(_cost) {}
};
vector<Edge> E[MAXN];
void addEdge(int u, int v, int w)
{
	E[u].push_back(Edge(v, w));
	E[v].push_back(Edge(u, w));
}
int mu[MAXN];
bool vis[MAXN]; // 在队列列标志
int cnt[MAXN]; // 每个点的?入列列队次数
int dist[MAXN];
bool SPFA(int start)
{
	memset(vis, false, sizeof(vis));
	memset(dist, 0x3f, sizeof(dist));
	
	vis[start] = true;
	dist[start] = 0;
	queue<int> que;
	
	while (!que.empty())
	que.pop();
	
	que.push(start);
	memset(cnt, 0, sizeof(cnt));
	cnt[start] = 1;
	
	while (!que.empty())
	{
		int u = que.front();
		que.pop();
		vis[u] = false;
		for (int i = 0; i < E[u].size(); i++)
		{
			int v = E[u][i].v;
			if (dist[v] > dist[u] + E[u][i].cost)
			{
				dist[v] = dist[u] + E[u][i].cost;
				if (!vis[v])
				{
					vis[v] = true;
					que.push(v);
					if (++cnt[v] > p)
					{
						return false; // cnt[i]为?入队列列次数,?用来判定是否存在负环回路路
					}
				}
			}
		}
	}
}
int main(){
//	freopen("in.txt","r",stdin);
		while(scanf("%d%d%d",&n,&p,&c)!=EOF){
	
		for(int i=1;i<=n;i++){
			scanf("%d",&mu[i]);
		}
		
		for(int j=0;j<c;j++){
			int st,ed,cost;
			scanf("%d%d%d",&st,&ed,&cost);
			addEdge(st, ed, cost);	
		}
		int sum=INF;
		for(int i=1;i<=p;i++)
		{
			
			SPFA(i);
			int tol=0;
			for(int j=1;j<=n;j++)
			tol+=dist[mu[j]];
			if(sum>tol&&tol!=0)
			sum=tol;
		}
		printf("%d\n",sum);	
	}
	return 0;	
}

查看评论

USACO 香甜的黄油

题目描述 Description农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1...
  • Loi_imcy
  • Loi_imcy
  • 2015-10-25 18:56:02
  • 949

USACO3.2.6 香甜的黄油 (SPFA)

【问题描述】   农夫John发现做出全威斯康辛州最甜的黄油的方法:把糖放在一片牧场上,他知道N(1...
  • wx_t91
  • wx_t91
  • 2016-07-17 16:21:07
  • 254

WUST 1935 香甜的黄油(最短路径+SPFA算法)

农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1...
  • qq_37497322
  • qq_37497322
  • 2017-07-10 22:07:55
  • 200

洛谷1828 香甜的黄油

题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1 农夫John很狡猾。像以前的Pavlov,他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的...
  • qq_40448823
  • qq_40448823
  • 2018-01-14 17:23:13
  • 205

【USACO3.2.6】香甜的黄油

【问题描述】 农夫John发现做出全威斯康辛州最甜的黄油的方法:把糖放在一片牧场上,他知道N(1...
  • cqyz_yuyuko
  • cqyz_yuyuko
  • 2016-07-17 10:21:54
  • 219

Sweet Butter 香甜的黄油(spfa)

#include #include int n,p,c,x,y,t,min=0x7fffffff/3,f,l,idx,u,a[1001][1001],b[1001],dis[1001],num[1...
  • jmh20021118
  • jmh20021118
  • 2017-08-13 10:23:17
  • 114

[Usaco-3.2.6] Sweet Butter香甜的黄油

usaco-3.2.6 Sweet Butter香甜的黄油时间限制: 1 Sec 内存限制: 128 MB题目描述农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(...
  • slongle_amazing
  • slongle_amazing
  • 2015-06-23 12:46:18
  • 335

【日常学习】【Dijkstra堆优化】codevs2038 香甜的黄油题解

转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake 先放上题目,出自USACO  题目描述 Description 农夫John发现做出全威斯康...
  • ametake
  • ametake
  • 2015-05-23 10:11:02
  • 1463

【USACO题库】3.2.6 Sweet Butter香甜的黄油

题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1 农夫John知道每只奶牛都在各自喜欢的牧场(一个牧场不一定只有一头牛)。给出各头牛在的牧场和牧场间的路...
  • John_pascal
  • John_pascal
  • 2016-04-15 20:27:06
  • 581

香甜的黄油

题目描述      农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1      农夫John很狡猾。像以前的巴甫洛夫,他知道他可以训练这些奶牛...
  • hbhszxyb
  • hbhszxyb
  • 2014-03-31 17:51:37
  • 1562
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 2614
    排名: 1万+