提交记录
#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");
}