首页 > TAG信息列表 > P1197
P1197 [JSOI2008]星球大战 题解
这题有着很深的背景呢…… 本孱弱第一次写题解,请多多支持 这题最有意义的地方是:逆序思考。 不断的维护摧毁后的数量,会非常困难。但是!~ 我们不妨去试着重建,一点一点重建。假设这些都是已经被摧毁了的,那么我们如果修复该怎么办呢?我们可以把它周围的所有道路都重新连起来,并且通过并题解 P1197 【[JSOI2008]星球大战】
链接戳这里☞ 星球大战 #include<cstdio> #include<cstring> #include<vector> #include<queue> using namespace std; int mp[400001][3]; vector<int> q; vector<int> edge[400005]; int m,n,z,res; booP1197 [JSOI2008]星球大战
算法 并查集+逆序 思路 做这道题前呢,我们先出门左转关闭农场,一道类似的更简单一丢丢的题 然后,我们考虑一下这题,因为并没有过多的操作,只是要我们求一下连通块的个数而已(也就是连通性,具有传递性的连通),而这恰好是并查集所擅长的。 然而,我们正向看题目时就会发现不支持删除操作的并查Luogu P1197 [JSOI2008]星球大战
经巨佬们指教,得知要用:逆向思维法(这个一定要想到啊QwQwQ) 之后想了想,发现我大致思路跟第一篇题解比较像(后来AC代码的细节不一样,我是在每次‘恢复’循环开始时计数的,题解是循环末尾,大同小异吧) 但我在每次计数的写法上调了好长时间 最初想的是每次枚举每个结点看是否fa[i]==i,后来才知P1197 [JSOI2008]星球大战
------------------------------------- 这可真是星球大战 -------------------------------------- 链接: P1197 ----------------------------------------- 看一下这道题,如果我们正着做,每摧毁一个后就重新建图,判连通。这样肯定工程浩大且超时,我们就要换个方法了。 为什么不倒着做P1197 [JSOI2008]星球大战[并查集+图论]
题目来源:洛谷 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。 但好景不长,很快帝国又重新造出了他的