Harry Potter and the Final Battle Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2118    Accepted Submission(s): 580 Problem Description The final battle is coming. Now Harry Potter is located…
http://acm.hdu.edu.cn/showproblem.php?pid=3986 [题意] 给定一个有重边的无向图,T=20,n<=1000,m<=5000 删去一条边,使得1~n的最短路最长 求最短路最长是多少 [思路] 一定是删最短路上的边 可以先跑一个Dijkstra,求出最短路,然n后枚举删边 朴素的Dijkstra为n^2,枚举删边(n条)需要的总时间复杂度是n^3 堆优化Dijkstra(nlogn),总复杂度为n^2logn 有多重边,用邻接矩阵不方便,用邻接表方便,…
一个水题WA了60发,数组没开大,这OJ也不提示RE,光提示WA...... 思路:先求出最短路,如果删除的边不是最短路上的,那么对结果没有影响,要有影响,只能删除最短路上的边.所以枚举一下最短路上的边,每次求最短路即可. #include<stdio.h> #include<vector> #include<string.h> #include<queue> #include<algorithm> using namespace std; +…
给你一个无向图,然后找出当中的最短路, 除去最短路中的随意一条边,看最糟糕的情况下, 新的图中,第一个点到末点的最短路长度是多少. 我的做法是: 首先找出最短路,然后记录路径, 再一条一条边的删, 删一条算一下最短路长度, 之后恢复这条边,删掉下一条边继续算, 以此类推. 看之中最糟糕的情况下,最短路长度是多少, 假设是无穷大则代表最坏情况为不通,按题意输出-1就可以, 否则输出最坏情况下,最短路长度. 我用spfa和链式向前星做的, 代码例如以下: #include<iostream> #i…
Harry Potter and the Final Battle Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 3239    Accepted Submission(s): 906 Problem Description The final battle is coming. Now Harry Potter is located…
Harry Potter and the Hide Story Problem Description iSea is tired of writing the story of Harry Potter, so, lucky you, solving the following problem is enough.   Input The first line contains a single integer T, indicating the number of test cases. E…
http://acm.hdu.edu.cn/showproblem.php?pid=3986 从开始的最短路里依次删一条边,求新的最短路,求最长的最短路 删边操作要标记节点以及节点对应的边 #include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std ; const int INF=0xfffffff ; struct node{ i…
Harry Potter and the Forbidden Forest Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2089    Accepted Submission(s): 702 Problem Description Harry Potter notices some Death Eaters try to slip…
view code//hdu 3987 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <queue> using namespace std; typedef long long ll; const ll INF = 1LL<<59; const ll E = 100001; const int N = 10…
对修改操作按时间分治,设$solve(l,r,n,m)$为考虑时间在$[l,r]$的修改操作,作用范围是$n$个点,$m$条边的图. 若$l=r$,则暴力Tarjan统计桥边个数即可. 否则提取出$[l,r]$内涉及修改的所有边$E$,并将端点标记为$V$,显然$|V|=O(|E|)$. 加入$m$条边里除了$E$之外的所有边,显然无论怎么修改,这些边都会存在. Tarjan求出边双连通分量,将边双缩点,可以得到一个森林,那么非树边永远都不可能成为桥,直接删除即可. 还可以注意到的是,还未加入的…