题意:bc round 74

分析(官方题解):

你可以选择分类讨论, 但是估计可能会写漏一些地方.

只要抽出新增边的端点作为关键点, 建立一个新图, 然后跑一遍floyd就好了. 复杂度大概O(6^2m)

注:然后我不会这种,这种floyd我觉得复杂度应该是复杂度应该是O(8^3m)

大概在千万级别,其实应该可以过,然后,其实只需要求单元最短路就行,然后是不是可以dij,然后就快一点

反正我也没写

我在比赛的时候写的是分治,考虑走不走新加的边每次走几条,以及走的顺序就好

然后全排列,时间复杂度是O(3^4m)的,大概在800w,然后由于这是单组样例800w*T

然后就超时了,然后比完赛,我就加了个剪枝,当前长度大于答案的时候,就返回

然后就1516ms过了,所以,以后记住要剪枝,不要图省事

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
typedef long long LL;
const int N=1e9+;
int o[],x[],y[],n,m,s,t,ans,T;
void dfs(int pos,int now,int sum)
{
if(sum>=ans)return;
ans=min(ans,abs(t-now)+sum);
int i=o[pos];
if(pos==)
{
ans=min(ans,abs(t-now)+sum);
return;
}
int tmp=sum+abs(now-x[i])+;
dfs(pos+,y[i],tmp);
tmp=sum+abs(now-y[i])+;
dfs(pos+,x[i],tmp);
dfs(pos+,now,sum);
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=; i<; ++i)
{
scanf("%d%d",&x[i],&y[i]);
if(x[i]>y[i])swap(x[i],y[i]);
}
LL res=;
for(int i=; i<=m; ++i)
{
scanf("%d%d",&s,&t);
ans=0x3f3f3f3f;
o[]=,o[]=,o[]=;
dfs(,s,);
o[]=,o[]=,o[]=;
dfs(,s,);
o[]=,o[]=,o[]=;
dfs(,s,);
o[]=,o[]=,o[]=;
dfs(,s,);
o[]=,o[]=,o[]=;
dfs(,s,);
o[]=,o[]=,o[]=;
dfs(,s,);
ans=min(ans,abs(s-t));
LL p=ans,q=i;
res=(res+q*p%N)%N;
}
printf("%I64d\n",res);
}
return ;
}

HDU 5636 Shortest Path 分治+搜索剪枝的更多相关文章

  1. HDU 5636 Shortest Path 暴力

    Shortest Path 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5636 Description There is a path graph ...

  2. HDU 5636 Shortest Path(Floyed,枚举)

    Shortest Path Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tot ...

  3. HDU 5636 Shortest Path

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5636 题解: 1.暴力枚举: #include<cmath> #include<c ...

  4. HDU 5636 Shortest Path(Floyd)

    题目链接  HDU5636 n个点,其中编号相邻的两个点之间都有一条长度为1的边,然后除此之外还有3条长度为1的边. m个询问,每次询问求两个点之前的最短路. 我们把这三条边的6个点两两算最短路, 然 ...

  5. hdu 3631 Shortest Path(Floyd)

    题目链接:pid=3631" style="font-size:18px">http://acm.hdu.edu.cn/showproblem.php?pid=36 ...

  6. hdu 5113(2014北京—搜索+剪枝)

    题意:有N*M的棋盘,用K种颜色去染,要求相邻块不能同色.已知每种颜色要染的块数,问能不能染,如果能,输出任一种染法. 最开始dfs失败了- -,优先搜索一行,搜完后进入下一列,超时.本来以为搜索不行 ...

  7. HDU - 3631 Shortest Path(Floyd最短路)

    Shortest Path Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u SubmitStat ...

  8. HDU - 4725_The Shortest Path in Nya Graph

    The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...

  9. 【HDU 6171】Admiral(搜索+剪枝)

    多校10 1001 HDU 6171 Admiral 题意 目标状态是第i行有i+1个i数字(i=0-5)共6行.给你初始状态,数字0可以交换上一行最近的两个和下一行最近的两个.求20步以内到目标状态 ...

随机推荐

  1. android项目在eclipse下编译运行的问题

    JDK与电脑系统要匹配,都是32位或者64位: android工程要与JDK相匹配,如果之前的android工程使用的jdk版本较高,则可能出现一些包或者类.方法.属性对应不上而报错,Android ...

  2. java接口与继承

    class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } p ...

  3. XML工具类 - XmlUtils.java

    XML工具类,提供序列化XML.反序列化XML.获取指定节点的值的方法. 源码如下:(点击下载 - XmlUtils.java.dom4j-1.6.1.jar.xstream-1.4.7.jar ) ...

  4. 1018: [SHOI2008]堵塞的交通traffic - BZOJ

    Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一 ...

  5. Mysql异常:MySQLNonTransientConnectionException: No operations allowed after statement closed

    Mysql异常:MySQLNonTransientConnectionException: No operations allowed after statement closed MySQLNonT ...

  6. Linux find example

    find | xargs echo >> x1 find -exec echo {} \; >> x2 1.查找/var目录下属主为root并且属组为mail的所有文件:fin ...

  7. Deployment of VC2008 apps without installing anything

    If you create a default CRT/MFC application with VS2008, this application will not run on other comp ...

  8. RCC 2014 Warmup (Div. 2) ABC

    题目链接 A. Elimination time limit per test:1 secondmemory limit per test:256 megabytesinput:standard in ...

  9. poj 2100 Graveyard Design

    直接枚举就行了 #include<iostream> #include<stdio.h> #include<algorithm> #include<ioman ...

  10. 213. House Robber II

    题目: Note: This is an extension of House Robber. After robbing those houses on that street, the thief ...