76pts 求条
查看原帖
76pts 求条
964645
pies_0x楼主2024/8/9 19:53

提交记录

#include<cstdio>
#include<ctime>
#include<algorithm>
#include<vector>
#include<queue>
#include<unordered_map>
using namespace std;

#define N 5005
#define bind pair<int,pair<int,int> > 

int n,m;
int id[N];
vector<int>maps[N];
queue<bind> q;
unordered_map<int,bool> vis;

int getldis(int u,int v)
{
	u=id[u];v=id[v];
	if(v>u)
		u+=360;
	return (u-v<180)*(u-v);
}

int getrdis(int u,int v)
{
	u=id[u];v=id[v];
	if(u>v)
		v+=360;
	return (v-u<180)*(v-u);
}

signed main()
{
	scanf("%d%d%d",&n,&m,&id[1]);
	for(int i=2;i<=n;++i)
		scanf("%d",&id[i]);
	for(int i=1;i<=m;++i)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		maps[u].push_back(v);
		maps[v].push_back(u);
	}
	q.push({1,{0,0}});vis[0]=1;
	while(q.size())
	{
		bind temp=q.front();q.pop();
		int u=temp.first,dis=temp.second.first,lrdis=temp.second.second;
		if(u==1&&lrdis)
		{
			printf("%d",dis);
			return 0;
		}
		for(int v:maps[u])
		{
			bind t={v,{dis+1,lrdis+getrdis(u,v)-getldis(u,v)}};
			if(!vis[t.second.second])
				q.push(t),
				vis[t.second.second]=1;
		}
	}
	puts("-1");
}/*
3 3
0 2 4
1 2
2 3
3 1
*/
2024/8/9 19:53
加载中...