Cow 4 proceeds directly to the party (3 units) and returns via farms 1 and 3 (7 units), for a total of 10 time units.
题意:每个农场一只牛要去聚会地点X聚会,每只牛去X和回家都会选择最近的路,问所有牛中,能走的路是最长的是多少?
思路:正反各建一下边;
代码:
#include
#include
#include
#include
#include
using namespace std;
#define inf 0x3f3f3f3f
const int maxn=1050;
int n,m,x;
struct Edge
{
int v;
int cost;
Edge(int _v=0,int _cost=0):v(_v),cost(_cost){}
};
vectorE1[maxn],E2[maxn];
int dist1[maxn],dist2[maxn];
//void addedge(int u,int v,int w)
//{
// E[u].push_back(Edge(v,w));
//}
bool vis[maxn];
int dist[maxn];
bool spfa(int start,int *dist,vectorE[])
{
memset(vis,false,sizeof(vis));
for(int i=0;i<=n;i++) dist[i]=inf;
vis[start]=true;
dist[start]=0;
queueque;
while(!que.empty()) que.pop();
que.push(start);
while(!que.empty())
{
int u=que.front();
que.pop();
vis[u]=false;
for(int i=0;i<(int)E[u].size();i++)
{
int v=E[u][i].v;
if(dist[v]>dist[u]+E[u][i].cost)
{
dist[v]=dist[u]+E[u][i].cost;
if(!vis[v])
{
vis[v]=true;
que.push(v);
}
}
}
}
return true;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&x)!=EOF)
{
int a,b,c;
for(int i=0;i<=n;i++)
E1[i].clear(),E2[i].clear();
for(int i=0;imaxx)
maxx=dist1[i]+dist2[i];
}
printf("%d\n",maxx);
}
return 0;
}