开始学tarjan的时候,有关无向图的割点、桥、点双边双缩点都比较容易地理解了,唯独对有向图的缩点操作不甚明了。通过对luoguP2656_采蘑菇一题的解决,大致搞清了tarjan算法的正确性。 首先放出有向图缩点tarjan函数的写法: } while (x != u); 问题主要出在函数的第二部 ...
分类:
编程语言 时间:
2019-06-30 18:40:00
阅读次数:
115
让我求解在一个区间上的最优解,那么我把这个区间分割成一个个小区间,求解每个小区间的最优解,再合并小区间得到大区间即可。所以在代码实现上,我可以枚举区间长度len为每次分割成的小区间长度(由短到长不断合并),内层枚举该长度下可以的起点,自然终点也就明了了。然后在这个起点终点之间枚举分割点,求解这段小区 ...
分类:
其他好文 时间:
2019-06-07 21:23:34
阅读次数:
93
作为橙名来水了一发…… 这次题目就比上次良心多了。7题有5题会做。 然而风格仍然很怪异……还是练少了? A 水题。不过一开始没注意细节挂了几发,罚时罚的真痛…… 明显是能除以 $k$ 就除以 $k$,否则就 $-1$。但注意不能直接最裸的模拟。 时间复杂度 $O(T\log n)$。 #includ ...
分类:
其他好文 时间:
2019-06-07 00:46:36
阅读次数:
95
先举个例子,如下test.txt文件数据,需要提取每条数据的title和content, 单独保存到文件中: 首先发现,数据是以空行作为分割点,所以,可以以空行拆分数据,做处理,具体代码如下: 上述代码中通过正则进行匹配title和content内容,如果它们在每条数据中的行号固定的话,简单些可以直 ...
分类:
编程语言 时间:
2019-06-04 09:39:25
阅读次数:
1010
题意 把链表分成左右半区,奇数个节点则右半区长一点,重新交叉排列成链表,如下例: 1,2,3,4,5, = 1,3,2,4,5, 1,2,3,4, = 1,3,2,4, 题解 找到分割点,拆开再合并。 代码 ...
分类:
其他好文 时间:
2019-06-02 01:22:37
阅读次数:
93
#include #include #include #include using namespace std; void addstr(const string s, int i, int j, vector &result) {//从i到分割点j部分子串加入到result,需判断子串是否全为空,... ...
分类:
其他好文 时间:
2019-05-23 21:21:29
阅读次数:
121
Tarjan找割点,分成的部分就是该点的子树个数加1(根要特判) 输入输出方式好恶心呀。。。 #include<cstdio>#include<iostream>#include<cstring>#define N 11000using namespace std;int to[N*10],cnt, ...
分类:
其他好文 时间:
2019-05-19 12:34:07
阅读次数:
114
P2944 [USACO09MAR]地震损失2Earthquake Damage 2 $P$个点,$C$条双向边。求最少删去几个点使$N$个给定的点与点$1$分开。 显然的最小割。 将点$i$套路地拆成$i_1,i_2$,割点转化成割边 对于点$1$:$link(S,1_1,inf),link(1_ ...
分类:
其他好文 时间:
2019-05-04 14:44:22
阅读次数:
131
#include using namespace std; int n,m,x,y; int e[9][9]; int root=1; int timex;//时间戳 int num[9],low[9],flag[9];//flag标记割点 int min(int a,int b){ if(a=nu... ...
分类:
编程语言 时间:
2019-05-02 21:44:51
阅读次数:
155
#include<bits/stdc++.h> using namespace std; //input by bxd #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);--i) ...
分类:
其他好文 时间:
2019-05-02 18:51:25
阅读次数:
128