jzOI;1AC,1TLE,8WA求助
查看原帖
jzOI;1AC,1TLE,8WA求助
516867
SZnP楼主2022/7/3 19:17
#include <bits/stdc++.h>
using namespace std;
int i,graph[10][10],dis[10],Begin,End,dx[10],temp,temp2,temp3,temp4,check[10],checklen,minn,mini;
const int INF=0xfffffff;
bool vis[10];
int main()
{
	dx[1]=2;dx[2]=6;dx[3]=4;dx[4]=8;dx[5]=6;dx[6]=10;dx[7]=14;
	for(i=0;i<10;i++)
	for(int j=0;j<10;j++)
	{
		if(i==j)graph[i][j]=0;else
		graph[i][j]=INF;
	}
	for(i=1;i<=7;i++)
	{ 
		cin>>temp;
		dx[i]=dx[i]*(temp+1);
	}
	scanf("%d%d%d",&Begin,&End,&temp);
	for(i=0;i<temp;i++)
	{
		scanf("%d%d",&temp2,&temp3);
		scanf("%d",&temp4);
		graph[temp3][temp2]=graph[temp2][temp3]=dx[temp4];
	}
	while(!vis[End])
	{
		minn=INF;
		dis[Begin]=0;
		vis[Begin]=true;
		for(i=1;i<=temp;i++)//temp?7?
		{
			if(graph[Begin][i]!=INF&&vis[i]==true)
			{
				if(dis[i]>graph[Begin][i]+dis[Begin])
				dis[i]=graph[Begin][i]+dis[Begin];
			}
		}
			for(i=1;i<9;i++)
			{
				if(!vis[i]&&dis[i]<minn){minn=dis[i];Begin=i;}
			}
	}
	cout<<dis[End];
	return 0;
}
2022/7/3 19:17
加载中...