比赛 平凡的题目 评测结果 WWWWW
题目名称 平凡的皮卡丘 最终得分 0
用户昵称 debug 运行时间 0.150 s
代码语言 C++ 内存使用 11.42 MiB
提交时间 2015-11-03 11:25:40
显示代码纯文本
#include<cstdio>
using namespace std;
int n,m;
struct ff
{
	int x,y,v;
}f[211111]={};
int weizhi[111111]={};
int weizhi2[111111]={};
bool vis[111111]={};
int dis[111111]={};
int shuliang[111111]={};
bool vis2[222222]={};
int dis2[111111][2]={};
int top=0;
int tou=0,wei=-1;
int q[1111111]={};
struct gg
{
	int y,v;
}e[211111]={};
int main()
{
	freopen("both.in","r",stdin);
	freopen("both.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int a,b,c,d;
		scanf("%d%d%d%d",&a,&b,&c,&d);
		shuliang[a]++;
		shuliang[b]++;
		f[++top].x=a,f[top].y=b,f[top].v=c;
		f[++top].x=b,f[top].y=a,f[top].v=d;
	}
	for(int i=1;i<=n+1;i++)
		weizhi[i]=weizhi2[i]=weizhi[i-1]+shuliang[i-1];
	for(int i=1;i<=top;i++)
		e[weizhi2[f[i].x]].y=f[i].y,e[weizhi2[f[i].x]].v=f[i].v,weizhi2[f[i].x]++;
	for(int i=1;i<=n;i++)
		dis[i]=123456789;
	q[++wei]=1;
	vis[1]=1;
	while(tou<=wei)
	{
		int tn=q[tou];vis[tn]=0;
		for(int i=weizhi[tn];i<weizhi[tn+1];i++)
		{
			int temp=e[i].y;
			if(tn==1)
			{
				if(e[i].v<dis[temp])
				{
					dis[temp]=e[i].v;
					if(!vis[temp])
						q[++wei]=temp,vis[temp]=1;
				}
			}
			else if(dis[tn]+e[i].v<dis[temp])
			{
				dis[temp]=dis[tn]+e[i].v;;
				if(!vis[temp])
					q[++wei]=temp,vis[temp]=1;
			}
		}
		tou++;
	}
	if(dis[1]==123456789)
		printf("-1\n");
	else
		printf("%d\n",dis[1]*8/5);
	return 0;
}