题目链接:

  http://acm.fzu.edu.cn/problem.php?pid=2243

题目大意:

  给一张N个点M条边的有向图,从s出发,把在x1的人送到y1,在x2的人送到y2用的最短距离。

题目思路:

  【最短路】

  首先就两个乘客需要送,手写可以得到6种先后次序。

  s>x1>x2>y1>y2;

  s>x1>y1>x2>y2;

  s>x1>x2>y2>y1;

  第一个和第二个对调可得剩下三种情况。

  所以可以对s,x1,x2,y1,y2求5次单源最短路,最后累加求和取最小。

  

 //
//by coolxxx
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define eps (1e-8)
#define J 10
#define mod 1000000007
#define MAX 0x7f7f7f7f
#define PI 3.14159265358979323
#define N 1004
#define M 100004
using namespace std;
typedef long long LL;
int cas,cass;
int n,m,lll,ans;
struct xxx
{
int next,to,dis;
}a[M];
int c[N][N];
int last[N],d[N],q[N];
bool u[N];
void add(int x,int y,int z)
{
a[++lll].next=last[x];
a[lll].to=y;
a[lll].dis=z;
last[x]=lll;
}
void spfa(int s)
{
mem(d,);mem(u,);
int i,l=,r=,now,to;
q[]=s;d[s]=;
while(l!=r)
{
now=q[l=(l+)%N];
u[now]=;
for(i=last[now];i;i=a[i].next)
{
to=a[i].to;
if(d[to]>d[now]+a[i].dis)
{
d[to]=d[now]+a[i].dis;
if(!u[to])
{
u[to]=;
q[r=(r+)%N]=to;
}
}
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k;
int x,y,z,s,x1,y1,x2,y2;
// for(scanf("%d",&cas);cas;cas--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s))
while(~scanf("%d",&n))
{
lll=;
mem(last,);mem(c,);
scanf("%d",&m);
scanf("%d%d%d%d%d",&s,&x1,&y1,&x2,&y2);
for(i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
spfa(s);
c[s][x1]=d[x1];c[s][x2]=d[x2];c[s][y1]=d[y1];c[s][y2]=d[y2];
spfa(x1);
c[x1][x2]=d[x2];c[x1][y1]=d[y1];c[x1][y2]=d[y2];
spfa(x2);
c[x2][x1]=d[x1];c[x2][y2]=d[y2];c[x2][y1]=d[y1];
spfa(y1);
c[y1][x2]=d[x2];c[y1][y2]=d[y2];
spfa(y2);
c[y2][y1]=d[y1];c[y2][x1]=d[x1];
ans=c[s][x1]+c[x1][x2]+c[x2][y1]+c[y1][y2];
ans=min(ans,c[s][x1]+c[x1][y1]+c[y1][x2]+c[x2][y2]);
ans=min(ans,c[s][x1]+c[x1][x2]+c[x2][y2]+c[y2][y1]);
ans=min(ans,c[s][x2]+c[x2][x1]+c[x1][y1]+c[y1][y2]);
ans=min(ans,c[s][x2]+c[x2][y2]+c[y2][x1]+c[x1][y1]);
ans=min(ans,c[s][x2]+c[x2][x1]+c[x1][y2]+c[y2][y1]);
printf("%d\n",ans);
}
return ;
}
/*
// //
*/

【最短路】FOJ 2243 Daxia like uber的更多相关文章

  1. FZU 2243 Daxia like uber

    枚举,最短路. 求出5个点出发的最短路,然后枚举一下这些点之间走的顺序. #pragma comment(linker, "/STACK:1024000000,1024000000" ...

  2. 【模拟】FOJ 2244 Daxia want to buy house

    题目链接: http://acm.fzu.edu.cn/problem.php?pid=2244 题目大意: 每月还款额=贷款本金×[月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1 ...

  3. 【数论】FOJ 2238 Daxia & Wzc's problem

    题目链接: http://acm.fzu.edu.cn/problem.php?pid=2238 题目大意: 已知等差数列A(0)的首项a和公差d,求出数列A(0)前n项和,得到新数列A(1);以此类 ...

  4. FOJ有奖月赛-2016年8月(daxia专场之过四题方有奖)

    http://acm.fzu.edu.cn/contest/list.php?cid=152 主要是a题, lucas定理, 就这一版能过..  记录一下代码, 另外两个最短路  一个模拟,没什么记录 ...

  5. POJ 2243 Knight Moves(BFS)

    POJ 2243 Knight Moves A friend of you is doing research on the Traveling Knight Problem (TKP) where ...

  6. foj 2173 floyd+矩阵快速幂

     Problem 2173 Nostop Accept: 52    Submit: 210 Time Limit: 3000 mSec    Memory Limit : 32768 KB  Pro ...

  7. bzoj1001--最大流转最短路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...

  8. 【USACO 3.2】Sweet Butter(最短路)

    题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...

  9. Sicily 1031: Campus (最短路)

    这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...

随机推荐

  1. MyTask3

    近日做这个项目的时候感觉比较棘手的还是各类chart图处理的问题,详细的我就不多说了,代码我会贴出来,大家可以参考下,注释我还是写的比较详细的 1.饼状图百分比绑定问题(纠结了很久) // // ch ...

  2. 游标中的static参数

    以下测试用例将演示,使用static的游标和不使用的区别: if object_id(N't_test',N'u') is not null drop table t_test go create t ...

  3. Xcode 7真机测试详解

    1.准备 注意:一定要让你的真机设备的系统版本和app的系统版本想对应,如果不对应就会出现一个很常见的问题:could not find developer disk image 首先,准备好下面的设 ...

  4. 微软SQLHelper.cs类

    using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...

  5. SGU 162.Pyramids

    时间限制:0.25s 空间限制:6M; 题意: 按照AB, AC, AD, BC, BD, CD.给出一个空间四面体的6条边长.求出它的体积. Solution: 欧拉四面体公式:           ...

  6. SQL服务器名称的更改

    SQL服务器名称的更改   1.使用select @@ServerName可以看到当前数据库的服务器名称 2.从Sys.SysServers表中可以看到当前的所有服务器名称 3.使用 sp_drops ...

  7. absolut绝对定位的非绝对定位用法

    一.absolute绝对定位的流行用法 一般而言,我们会用absolute绝对定位做什么呢?就是绝对定位,顾名思意,定死在某个位置上.例如,lightbox效果就是使用的绝对定位,例如新浪微博的弹出提 ...

  8. java 下载文件 内容为空。

    检查下是不是io流没有关闭,记得关闭所有流.

  9. css学习--inline-block详解及dispaly:inline inline-block block 三者区别精要概括

    *知识储备: 内联元素:是不可以控制宽和高.margin等:并且在同一行显示,不换行. 块级元素:是可以控制宽和高.margin等,并且会换行. 1.inline-block 详解 (1)一句话就是在 ...

  10. Atom package安装失败的解决方案

    cd ~/.atom/package git clone [package url] cd [package name] apm install [package name] if lack some ...