记录编号 175241 评测结果 AAAAAAAAAA
题目名称 [USACO Mar08] 牛跑步 最终得分 100
用户昵称 Gravatarforever 是否通过 通过
代码语言 C++ 运行时间 0.087 s
提交时间 2015-08-05 07:37:17 内存使用 0.56 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<cstring>
using namespace std;
int a,b,c;
struct dd
{
	int zhong;
	int juli;
	int next;
}jie[10005],jiege[10005];
int head[1002],heard[1002],num[1002];
int tot,tot1,n,m,k,dis[1002];
bool v[1002];
struct data
{
	int g,h,to;
	bool operator<(const data  &a)const 
	{
		return a.g+a.h<g+h;
	}
};
void add(int x,int y,int r)
{
	tot++;
	jiege[tot].zhong=y;
	jiege[tot].juli=r;
	jiege[tot].next=heard[x];
	heard[x]=tot;
}
void add1(int x,int y,int r)
{
	tot1++;
	jie[tot1].juli=r;
	jie[tot1].next=head[x];
	jie[tot1].zhong=y;
	head[x]=tot1;
}
void spfa(int y)
{
	for(int i=1;i<=n;++i)
	   dis[i]=999999999;
	dis[y]=0;
	v[y]=1;
	queue<int>po;
	po.push(y);
	while(!po.empty())
	{
		int yu=po.front();
		po.pop();
		v[yu]=0;
		for(int i=heard[yu];i;i=jiege[i].next)
		{
			int lin=jiege[i].zhong;
			if(dis[yu]+jiege[i].juli<dis[lin])
			{
				dis[lin]=dis[yu]+jiege[i].juli;
				if(!v[lin])
				{
					v[lin]=1;
					po.push(lin);
				}
			}
		}
	}
	
}
int A_star(int k)
{
	data ser,hj;
	priority_queue<data>q;
	memset(num,0,sizeof(num));
	ser.g=0;
	ser.h=dis[1];
	ser.to=1;
	q.push(ser);
	while(!q.empty())
	{
		ser=q.top();
		q.pop();
		num[ser.to]++;
		if(num[ser.to]>k) continue;
		if(num[n]==k){
			return ser.g;
		}
		for(int i=head[ser.to];i;i=jie[i].next)
		{
			int yu=jie[i].zhong;
			hj.g=ser.g+jie[i].juli;
			hj.h=dis[yu];
			hj.to=yu;
			q.push(hj);
		}
	}
	return -1;
}
int main()
{   freopen("cowjog.in","r",stdin);
    freopen("cowjog.out","w",stdout);
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=m;++i)
	{
		scanf("%d%d%d",&a,&b,&c);
		add(a,b,c);
		add1(b,a,c);
	}
	spfa(n);
	printf("%d\n",dis[1]);
	for(int i=2;i<=k;++i)
	{
		int ji=A_star(i);
		printf("%d\n",ji);
	}
}