BZOJ-1880 Elaxia的路线 SPFA+枚举
1880: [Sdoi2009]Elaxia的路线 
Time Limit: 4 Sec  Memory Limit: 64 MB 
Submit: 921  Solved: 354 
[Submit][Status][Discuss]
Description 
最近,Elaxia和w* 的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间。Elaxia和w  每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长。 现在已知的是Elaxia和w*所在的宿舍和实验室的编号以及学校的地图:地图上有N个路 口,M条路,经过每条路都需要一定的时间。 具体地说,就是要求无向图中,两对点间最短路的最长公共路径。
Input 
第一行:两个整数N和M(含义如题目描述)。 第二行:四个整数x1、y1、x2、y2(1 ≤ x1 ≤ N,1 ≤ y1 ≤ N,1 ≤ x2 ≤ N,1 ≤ ≤ N),分别表示Elaxia的宿舍和实验室及w**的宿舍和实验室的标号(两对点分别 x1,y1和x2,y2)。 接下来M行:每行三个整数,u、v、l(1 ≤ u ≤ N,1 ≤ v ≤ N,1 ≤ l ≤ 10000),表 u和v之间有一条路,经过这条路所需要的时间为l。 出出出格格格式式式::: 一行,一个整数,表示每天两人在一起的时间(即最长公共路径的长度)。
Output 
一行,一个整数,表示每天两人在一起的时间(即最长公共路径的长度)
Sample Input 
9 10 
1 6 7 8 
1 2 1 
2 5 2 
2 3 3 
3 4 2 
3 9 5 
4 5 3 
4 6 4 
4 7 2 
5 8 1 
7 9 1
Sample Output 
3
HINT 
对于30%的数据,N ≤ 100; 
对于60%的数据,N ≤ 1000; 
对于100%的数据,N ≤ 1500,输入数据保证没有重边和自环。
Source 
Day2
竟然自己rush出了正解,开心
题解:
4遍spfa,开四个dis数组,分别记录st1,st2,ed1,ed2到各点的最短路,然后枚举点对(i,j)判断i,j是否在最短路径上,然后更新答案即可.
PS:网上的好像都是DP啊,拓扑啊什么的.....
code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
int read()
{
    int x=0,f=1; char ch=getchar();
    while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
    while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
    return x*f;
}
#define maxn 1510
#define maxm 500010
int n,m,ans;
int st1,st2,ed1,ed2;
int len1,len2;
struct data{int to,next,tim;}edge[maxm*2];
int head[maxn],cnt;
void add(int u,int v,int t)
{
    cnt++;
    edge[cnt].next=head[u]; head[u]=cnt;
    edge[cnt].to=v; edge[cnt].tim=t;
}
void insert(int u,int v,int t)
{
    add(u,v,t); add(v,u,t);
}
int disst1[maxn],disst2[maxn],dised1[maxn],dised2[maxn];
bool visit[maxn];
#define inf 0x7fffffff
void spfa(int s,int* dis)
{
    queue<int>q;
    for (int i=1; i<=n; i++) dis[i]=inf;
    q.push(s); dis[s]=0;
    while (!q.empty())
        {
            int now=q.front(); q.pop();
            for (int i=head[now]; i; i=edge[i].next)
                if (dis[now]+edge[i].tim<dis[edge[i].to])
                    {
                        dis[edge[i].to]=edge[i].tim+dis[now];
                        if (!visit[edge[i].to])
                            {
                                q.push(edge[i].to);
                                visit[edge[i].to]=1;
                            }
                    }
            visit[now]=0;
        }
}
bool check(int loc)
{
    if (disst1[loc]+dised1[loc]!=len1 || disst2[loc]+dised2[loc]!=len2)
        return false;
    return true;
}
int main()
{
    n=read(),m=read();
    st1=read(),ed1=read(),st2=read(),ed2=read();
    for (int i=1; i<=m; i++)
        {
            int u=read(),v=read(),t=read();
            insert(u,v,t);
        }
    spfa(st1,disst1); spfa(st2,disst2);
    spfa(ed1,dised1); spfa(ed2,dised2);
    len1=disst1[ed1]; len2=disst2[ed2];
    for (int i=1; i<=n; i++)
        if (check(i))
            for (int j=1; j<=n; j++)
                if (check(j))
                    ans=max(ans,abs(disst1[i]-disst1[j]));
    printf("%d\n",ans);
    return 0;
}BZOJ-1880 Elaxia的路线 SPFA+枚举的更多相关文章
- bzoj1880: [Sdoi2009]Elaxia的路线(spfa,拓扑排序最长路)
		1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1944 Solved: 759[Submit][St ... 
- [BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA & 拓扑排序)
		Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ... 
- BZOJ 3245: 最快路线 spfa
		3245: 最快路线 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3245 Description 精明的小R每每开车出行总是喜欢走最快 ... 
- 【BZOJ 1880】  [Sdoi2009]Elaxia的路线 (最短路树)
		1880: [Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. ... 
- BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )
		找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 ---- ... 
- 【BZOJ1880】[Sdoi2009]Elaxia的路线(最短路)
		[BZOJ1880][Sdoi2009]Elaxia的路线(最短路) 题面 BZOJ 洛谷 题解 假装我们知道了任意两点间的最短路,那么我们怎么求解答案呢? 不难发现公共路径一定是一段连续的路径(如果 ... 
- BZOJ1880: [Sdoi2009]Elaxia的路线(最短路)
		1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2049 Solved: 805 题目链接:https ... 
- 洛谷——P2149 [SDOI2009]Elaxia的路线
		P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每 ... 
- 洛谷 P2149 [SDOI2009]Elaxia的路线 解题报告
		P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia ... 
随机推荐
- 利用OpacityMask制作打洞效果
			起因 项目上存在一个连线功能,在设计的原型中,在连线中间文字上下各有15像素的空白.接手的同事觉得没思路,问我能不能在不影响连线后面的背景情况下解决该问题.我就抽了点时间给他写了个Demo.回家后趁热 ... 
- Unity-WIKI 之 DebugConsole
			功能预览 使用说明 1.把 DebugConsole.cs 放在 Standard Assets 目录下(重要) 2.如果你想修改 DebugConsole的一些参数,把DebugConsole.cs ... 
- ViewPager -- Fragment 切换卡顿 性能优化
			当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即 Fragment需要加载UI内容,而又频繁地切换Fragment, ... 
- View (一)LayoutInflater()方法详解
			相信接 触Android久一点的朋友对于LayoutInflater一定不会陌生,都会知道它主要是用于加载布局的.而刚接触Android的朋友可能对 LayoutInflater不怎么熟悉,因为加载布 ... 
- jquery给元素添加样式表的方法
			//1.获取和设置样式 $("#tow").attr("class")获取ID为tow的class属性 $("#two").attr(&qu ... 
- jqXHR 对象(post完成后再调用函数)
			场景: function A() { B(); C(); } function B() { $.post(url, {}, function () { alert("我错了!"); ... 
- 记2012-2013年一路的Windows Phone历程
			昨天和秦春林同学小聚一次,不厌其烦的唠叨各种认识了许多年的纪念,感觉他仍然保持着那份对技术的追求和梦想,而我却已经变得逐利,每个人享受幸福的方式不一样,因此追逐幸福的过程也就是没有办法一样了,你无法知 ... 
- Oracle11G 7个服务说明
			中的方法成功安装Oracle 11g后,共有7个服务, 这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Service: Oracle卷映射拷贝写入服务,VSS(Volu ... 
- C#泛型-模板特化
			class TClass<T, K> { } class SubTClass<T, C, K> : TClass<Char, K> { } class SubTCl ... 
- 将Log4net的配置配置到的独立文件中
			本文转载:http://blog.csdn.net/wanzhuan2010/article/details/7587780 另外一篇博客:http://grim1980.blog.sohu.com/ ... 
