首页 > 其他分享 >AT_abc302_e

AT_abc302_e

时间:2024-01-20 18:11:07浏览次数:13  
标签:int cin abc302 ans 操作 include size

题意

给定一个有 \(n\) 个点的无向图。初始没有任何边。

接下来有 \(q\) 次操作,分为 \(2\) 种类型:

  • 1 u v:连接 \(u\) 和 \(v\),保证没有重边、自环。

  • 2 v:删除连接 \(v\) 的所有边。

每次操作后,输出没有连接其它任何点的点的数量(即度数为 \(0\) 的点的数量)。

思路

看到操作次数 \(1 \le q \le 3 \times 10^5\),可以推测输出的答案需要动态维护。而看到边可加可删,推测每次操作可以直接暴力加边、删边,一旦点的度数由 \(0\) 变 \(1\) 或由 \(1\) 变 \(0\) 时,则更新答案。

详细操作见代码:

#include <iostream>
#include <cstdio>
#include <set>

using namespace std;

set<int> G[1000001];
int n,m,t,x,y,ans,len;

int main()
{
	cin >> n >> m;
	ans = n;
	for( int i = 1 ; i <= m ; i ++ )
	{
		cin >> t;
		if( t == 1 )
		{
			cin >> x >> y;
			if( !G[x].size() ) ans --;
			if( !G[y].size() ) ans --;
			G[x].insert( y );
			G[y].insert( x );
		}
		if( t == 2 )
		{
			cin >> x;
			if( G[x].size() ) ans ++;
			for( auto j : G[x])
			{
				G[j].erase(x);
				if( !G[j].size() ) ans ++;
			}
			G[x].clear();
		}
		cout << ans << endl;
	}
	return 0;
}

标签:int,cin,abc302,ans,操作,include,size
From: https://www.cnblogs.com/-lilong-/p/17976898

相关文章

  • [abc302f] Merge Set
    F-MergeSet显然要建图首先,我们有一个粗略的想法,对于同一集合\(S_i\)内的元素,\(S_{i,j}\)与\(S_{i,j+1}\)间连一条无向的标号为\(i\)的边那么题目显然是要我们跑最短路,若到达\(x\)的边为\(i\),然后从\(x\)向外走到点\(y\),走的边若还为\(i\),那么代价为\(0\),否则代价为\(1\)也......
  • ABC302Ex Ball Collector 题解
    注意到当有那些\((a_i,b_i)\)是确定的时,答案就是将\((a_i,b_i)\)连边后每个连通块的\(\min(|V|,|E|)\)之和。那么这个东西用可撤销并查集维护即可。#include<algorithm>#include<cstdio>usingnamespacestd;constintN=2e5;structEdge{intto,nxt;}e[......
  • [ABC302G]
    [ABC302G]Sortfrom1to4一道简单的性质分析题。考虑到这个数列只有\([1,4]\)的数,就可以考虑有哪几种交换方案。我们先统计出\(t[i][j]\)表示应该填\(i\)但是填了\(j\)的位置,注意\(i=j\)时\(t[i][j]=0\)。交换两个数,例如\(t[1][2],t[2][1]\),代价为\(1\),恢复......
  • [ABC302F]MergeSet
    AGC010BBoxes这道题其实是一道01BFS求最短路的模型,但是建模比较难想。首先需要想到对于每个集合内的点两两连边,边权为\(1\),由于开始和结束时需要从起点到中转点和中转点到终点,而我们要求的其实是中转点的数量,如果我们直接求一遍最短路(这样的话用的是普通bfs),中准点之间是an......
  • Atcoder Beginner Contest ABC302 题解
    代码见此:https://atcoder.jp/contests/abc302/submissions?f.Task=&f.LanguageName=&f.Status=&f.User=frequenter。AAttackhttps://atcoder.jp/contests/abc302/tasks/abc302_a直接计算a/b,有余数的话答案加一。BFindSnukehttps://atcoder.jp/contests/abc302/tasks/abc......
  • 【题解】Atcoder ABC302 F,G,Ex
    完全不会G和Ex,这些套路还是要积累一下的。F.MergeSet题目描述:给定\(n\)个集合,每次可以合并两个有交的集合,问最少多少次合并可以让\(1\)和\(m\)位于同一个集合中。题目分析:一开始将题读成了将\([1,m]\)位于同一个集合中,然后就感觉这个题相当不可做。因为集合的元......
  • abc302 题解
    打的还行,加的分不多。A直接除完上取整即可。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1e5+5,INF=0x3f3f3f3f;constLLmod=1e9+7;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr); LLa,b; ci......