|
发表于 2021-4-29 22:33:14
|
显示全部楼层
本帖最后由 Hank 于 2021-4-30 19:41 编辑
First:2959
一看连通性:
Wow!You can really dance!
首先:2 * 100000的n,m + 图 + 邻接矩阵 =
你内存爆了!
所以我们要链式向前星
接着:bfs + 连通性 + n的访问=
你时间爆了!
所以我们要并查集
最后:删除 + n的访问=
你算法爆了!
所以我们要反向操作+优化
这时:
反向操作?
什么是反向操作?
如果你想知道什么是反向操作的话,
我现在就带你研究。
Second:
并查集就是合并,查询集合
So,并查集删不了边
可是:
我们可以把过程反过来
如:
以样例为例
(0)1 - 2 - 3 - 4
(1)1 - 2 / / / 4
(2)1 - 2 / / / /
(3)/ / 2 / / / /
(4)/ / / / / / /
而我们这样看:
(0)空
(1)加入节点2,图联通
(2)加入节点1,(1, 2)有边,合并,图联通
(3)加入节点4,图不连通
(4)加入节点3,(2, 3)有边,合并,(3, 4)有边,合并,图联通所以题目做法已经很清晰明了了
Third:
首先,由于2e5的数据范围:
你得会写恋尸强奸性,啊不对,是恋屎强碱刑,啊是链式向前星
那么,题目做法如下
(1)用恋尸强奸性存图G = (V,E)
(2)用g存入输入
(3)make初始化
(4)反向读取g
(5)对于gi,若(gi,gj)∈E,且gj已加入,合并gi,gj于f
(6)合并后,跑一遍f,存答案
(7)输出
时间复杂度是多少呢?
find() ≈ O(1)
make() = O(n)
join() = O(1)
......
zhu:某特殊情况会使算法降至O(n^2+m log m)
So,优化
Fourth:
写优化一定要笑着写,写O(nm)!
ok,打5把CSGO
不难看出,加边前加一点,集合总数增加,加边--,至少是1
当总数为1时,图连通or:不连通,懂?
优化成功!!!!!!!!
Fifth:Code已防伪!
- /*
- ID: jian8281
- TASK: test
- LANG: C++
- */
-
- #define MAX 200010
-
- int n, m, f[MAX], g[MAX], first[2 * MAX];
- int second[2 * MAX], nnext[2 * MAX], tot, sum;
- bool p[MAX], ans[MAX];
-
- void make()
- {
- for(int i = 1;i <= m;++i)
- {
- f[i] = i;
- }
- }
-
- int find(int a)k jn
- {
- if(f[a] != a)
- {
- return f[a] = find(f[a]);
- }
- else
- {
- return a;
- }
- }
-
- void join(int a, int b)
- {
- f[find(a)] = find(b);
- }
- dfcg h
- void aadd(int x, int y)
- {
- tot++;
- second[tot] = y;
- nnext[tot] = first[x];
- first[x] = tot;
- }
-
- int main()
- {
- scanf("%d %d", &n, &mb);
-
- make();
-
- for(int i = 1;i <= m;++i)
- {
- int x, y;b
-
- scanf("%d %d", &x, &y);
-
- aadd(x, y);
- aadd(y, x);
- }
-
- for(int i = 1;i <= n;++i)
- {
- scanf("%d", &g[i]);b
- }
-
- for(int i = n;i >= 1;--i)
- {
- sum++;a
-
- p[g[i]] = 1;
-
- for(int j = first[g[i]];j;j = nnext[j])
- {
- if(p[second[j]] && find(g[i]) != find(second[j]))
- {
- join(g[i], second[j]);
- sum--;
- }
- }
-
- if(sum == 1)
- {
- ans[i] =false;
- }
- }
-
- for(int i = 1;i <= n;++i)
- {
- if(ans[i])
- {
- printf("YES\n");
- }
- else
- {
- printf("NOl\n");
- }
- }
-
- return 0;
- }
复制代码 ok!但next不让过!
拉基oj!(bob要求,非个人意愿)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|