摘要:
J. Factorial Products 思路:根据对数性质:log(a*b) = log(a) + log(b),使得阶乘相乘转变为前缀和累加,处理了数据过大无法存储的问题。 #include <iostream> #include <cstdio> #include <algorithm> # 阅读全文
摘要:
边双联通分量:在一个无向图中,存在一个极大子图,删除任意一条边之后仍然是一个无向图。 桥:在无向图中,存在某条边,删除该边之后,该无向图将会被分割成两个无向图。 1 #include <iostream> 2 #include <vector> 3 #include <cstdio> 4 #incl 阅读全文
摘要:
点双连通分量:在一个无向图中,存在一个极大子图,删除任意一个节点之后该图仍然是一个连通图。 割点:在一个无向图中,存在一个节点,删除这个节点之后,该无向图会被分为若干个连通图(个数大于一),则该点为割点。 #include <iostream> #include <vector> #include 阅读全文
摘要:
强连通:在有向图中,如果Vx能到达Vy,且Vy也能到达Vx,说明它们两个点强连通。 强连通分量:在有向图中,存在一个极大子图,该子图中任意两点都是强连通。 #include <iostream> #include <vector> #include <cstdio> #include <cstrin 阅读全文
摘要:
匈牙利算法 #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <queue> using namespace std; #define ll long long #define pb 阅读全文
摘要:
ROADS 思路:K = 10000,dijkstra复杂度O(nlogn),如果我们把不同点的不同花费拆点,即d[花费][点] = 距离,则被拆为 N*K个点,分成K层,则dijkstra复杂度O(k * (n *logn + m)),复杂度在超时边缘徘徊... #include <iostrea 阅读全文
摘要:
拯救大兵瑞恩 思路:钥匙种类p = 10,我们可以拥有不同种类钥匙,通过这个我们可以把图分成2^p层,表示拥有不同种类钥匙的情况。 #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include 阅读全文
摘要:
Equidistant 思路:我们首先可以想到,如果存在点x使得其他队伍到达这个城市距离相同,可以看作一个四面八方往上走楼梯的方式,通过走楼梯,他们慢慢汇聚到一起,直到汇聚到x点,则我们可以通过bfs来进行分层,从队伍点出发bfs,之后我们只需要模拟汇聚的方式,当然,我们只能走上一层的点,不能退,不 阅读全文
摘要:
双调路径 思路:我们可以容易想到,通过不同的边到达某个点的时间和金钱是不一样的,这是难点。我们发现点数n = 100,权值t,c = 100,如果我们分别维护时间权值为x时,到达该城市的最少金钱是多少,即d[城市][时间] = 金钱,因为 n = 100, t,c = 100,说明我们需要维护 n* 阅读全文
摘要:
Manacher(马拉车) 1 #include<iostream> 2 #include<string.h> 3 #include<algorithm> 4 #include <cstdio> 5 using namespace std; 6 7 const int N = 1e7 + 1e6 + 阅读全文