题目链接:
https://www.luogu.org/problemnew/show/P1821
思路:
1:由x到各点跑spfa,是各牛回家最短路径
2:反向建图,从x点跑spfa,就是由各点到x,就是各牛参加活动的最短路径
算法:
spfa算法
#include<bits/stdc++.h>
using namespace std;
const int maxn=1001;
vector<pair<int,int> >e[maxn];
vector<pair<int,int> >k[maxn];
int n,m,x,a,b,c;
int ing[maxn],d1[maxn],d2[maxn];
void init(int *p)
{
for(int i=1;i<=n;i++)
{
ing[i]=0;
p[i]=1e9;
}
}
void spfa(vector<pair<int,int> >*p,int *h)
{
init(h);
queue<int>q;
q.push(x);
h[x]=0;
ing[x]=1;
while(!q.empty())
{
int now=q.front();
q.pop();
ing[now]=0;
for(int i=0;i<p[now].size();i+&#