首页 > 其他分享 >洛谷 P1197 [JSOI2008] 星球大战 做题记录

洛谷 P1197 [JSOI2008] 星球大战 做题记录

时间:2024-10-21 15:48:02浏览次数:1  
标签:洛谷 fa int JSOI2008 Aqwqawa read define find P1197

我不会做摧毁,于是反着做,就变成了合并连通块,倒序加边即可,时间复杂度 \(O((n+m)\alpha(n))\)。(大抵是吧

点击查看代码
#include<bits/stdc++.h>

#define mem(aqwqawa,bqwqawa) memset((aqwqawa),(bqwqawa),sizeof(aqwqawa))
#define m0(aqwqawa) memset((aqwqawa),0,sizeof(aqwqawa))
#define lb(xqwqawa) ((xqwqawa)&-(xqwqawa))
#define lc(xqwqawa) ((xqwqawa)<<1)
#define rc(xqwqawa) (((xqwqawa)<<1)|1)
#define pb(Gqwqawa,xqwqawa) (Gqwqawa).push_back((xqwqawa))
#define For(Aqwqawa,Bqwqawa,Cqwqawa) for(int Aqwqawa=(Bqwqawa);Aqwqawa<=(Cqwqawa);Aqwqawa++)
#define Rep(Aqwqawa,Bqwqawa,Cqwqawa) for(int Aqwqawa=(Bqwqawa);Aqwqawa>=(Cqwqawa);Aqwqawa--)
#define in1(Aqwqawa) Aqwqawa=read()
#define in2(Aqwqawa,Bqwqawa) Aqwqawa=read(), Bqwqawa=read()
#define in3(Aqwqawa,Bqwqawa,Cqwqawa) Aqwqawa=read(), Bqwqawa=read(), Cqwqawa=read()
#define inn(Aqwqawa,Nqwqawa) For(Iqwqawa,1,Nqwqawa) Aqwqawa[Iqwqawa]=read();

#define ll long long
using namespace std;
inline int read() {
	int xx= 0;int f= 1;
	char c = getchar();
	while(c<'0'||c>'9') { 
		if(c=='-') f= -1;
		c= getchar();
	}
	while(c>='0'&&c<='9') {
		xx= (xx<<1)+(xx<<3)+(c^48);
		c= getchar();
	}
	return xx*f;
}
#define maxn 400050
int n,m,k;
vector<int>G[maxn];
bool vis[maxn];
int x[maxn];
int fa[maxn];
int find(int x) { return x==fa[x]?fa[x]:fa[x]=find(fa[x]); }
int ans[maxn];
signed main() {
	mem(vis,1);
	in2(n,m);
	For(i,1,m) {
		int u,v;
		in2(u,v);
		u++,v++;
		pb(G[u],v);
		pb(G[v],u);
	}
	in1(k);
	For(i,1,k) {
		in1(x[i]);
		x[i]++;
		vis[x[i]]=0;
	}
	int res=n-k;
	For(i,1,n) fa[i]=i;
	For(u,1,n) if(vis[u]) {
		for(auto v:G[u]) {
			if(vis[v]&&find(u)!=find(v)) {
				fa[find(u)]=find(v);
				res--;
			}
		}
	}
	ans[k+1]=res;
	Rep(i,k,1) {
		int u=x[i];
		vis[u]=1; res++;
		for(auto v:G[u]) if(vis[v]&&find(u)!=find(v)) {
			fa[find(u)]=find(v);
			res--;
		}
		ans[i]=res;
	}
	For(i,1,k+1) cout<<ans[i]<<'\n';
}

标签:洛谷,fa,int,JSOI2008,Aqwqawa,read,define,find,P1197
From: https://www.cnblogs.com/CodingGoat/p/18489636

相关文章

  • 洛谷题单指南-字符串-P4735 最大异或和
    原题链接:https://www.luogu.com.cn/problem/P4735题意解读:已知长度为n的数组a[],要在l~r范围找到一个p,使得a[p]^a[p+1]^...^a[n]^x最大,求这个最大的异或值。解题思路:1、利用前缀和将问题转化设s[]是a[]的前缀异或数组,要计算a中一段范围l~r的异或,可以借助于s由于s[r]=a[0]^a[......
  • 【洛谷 P1116】车厢重组 题解(模拟+冒泡排序)
    车厢重组题目描述在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他......
  • 【洛谷 P1116】车厢重组 题解(模拟+冒泡排序)
    车厢重组题目描述在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他......
  • 洛谷P3741 小果的键盘(Python)
    海阔凭鱼跃,天高任鸟飞。——宋·阮阅《诗话总龟前集》一、题目传送门https://www.luogu.com.cn/problem/P3741二、代码input()s=list(input().strip())ans="".join(s).count("VK")foriinrange(len(s)):ifs[i]=='V':s[i]='K'......
  • 洛谷P5731 【深基5.习6】蛇形方阵(Python)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言尝试一种没写过的解法。一、题目传送门https://www.luogu.com.cn/problem/P5731二、代码deffuc(i,j,cur,sign):#位置为(i,j),写下cur,方向为signglobaln,ansifcur>n*n:retur......
  • 洛谷知识点——C++ 11 实现一次性输出多行文本
    完整语法是R"deli(...)deli"。(其中deli并不是固定的,那里其实是一个用户自定义的字符序列,最多16个基本字符,不可含反斜线,空格和小括号。)故P1000超级玛丽游戏解法为#include<iostream>usingnamespacestd;intmain(){cout<<R"(********......
  • 洛谷 P3382 三分
    三分题目背景本题可能存在严重精度问题,部分数据下难以通过。本题数据较水,仅供参考。题目描述如题,给出一个NNN次函数,保证在范围......
  • 20241018每日一题洛谷P2386
    普及每日一题信息学竞赛1206:放苹果把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1是同一种分法。第一行是测试数据的数目t(0<=t<=20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。对输入的每组数据M和N,用一行输出相......
  • 【LGR-203-Div.4】洛谷入门赛 #28
    【LGR-203-Div.4】洛谷入门赛#28\(A\)luoguB4042[语言月赛202410]顺序结构\(AC\)顺序结构。点击查看代码intmain(){lla;cin>>a;cout<<3*(5+a)<<""<<3*a+5<<endl;return0;}\(B\)luoguB4043[语言月赛202410......
  • 洛谷 P1983 [NOIP2013 普及组] 车站分级(拓扑排序)
    题目传送门解题思路对于每一趟列车,我们可以知道其中没有经过的车站的级别肯定会比经过的车站的级别低。于是,我们可以根据这种关系来建一个图。将等级小的车站往等级大的车站建边。于是,我们可以发现这是一个DAG(有向无环图),所以我们可以拓扑排序。我们从等级最小的车站......