跟着大佬上大分-Web of Lies

C.谎言之网

目录

题干

代码

补充


题干

时间限制每测试2秒

内存限制每test256兆字节

inputstandard输入

outputstandard输出

当你玩权力的游戏时,你要么赢,要么死。没有中间地带。

《权力的游戏》,作者:乔治·r·r·马丁

有n个贵族,从1到n个。贵族i的幂为i。还有m个“友谊”。贵族甲与贵族乙之间的友谊总是相互的。

如果满足以下两个条件,贵族就被定义为脆弱的:

贵族至少有一个朋友,而且

那个贵族的朋友都有更高的权力。

您必须处理以下三种类型的查询。

贵族u与v之间增添友谊。

解除贵族u和v之间的友谊。

计算以下过程的答案。

过程:所有脆弱的贵族同时被杀死,他们的友谊也随之结束。那么,新贵族就有可能变得脆弱。这个过程会不断重复,直到没有贵族会受到伤害。可以证明,这个过程将在有限的时间内结束。在这个过程完成后,你需要计算剩余的贵族数量。

注意,进程的结果不会在查询之间传递,也就是说,每个进程开始时所有的贵族都是活的!

输入

第一行包含整数n和m(1≤n≤2⋅105,0≤m≤2⋅105)——贵族数、原友谊数。

接下来的m行分别包含整数u和v(1≤u,v≤n, u≠v),描述了一段友谊。没有友谊是列两次的。

下一行为整数q(1≤q≤2⋅105)——查询次数。

接下来的q行包含查询本身,每个查询有以下三种格式之一。

1u v(1≤u,v≤n, u≠v) -在u和v之间添加一个友谊,可以保证u和v此刻不是朋友。

2 u v(1≤u,v≤n, u≠v) -去除u和v之间的友谊,此时u和v保证是朋友。

打印出陈述中描述的过程的答案。

输出

对于每个类型3查询,将一个整数打印到新行。可以保证至少有一个type 3查询。

例子

输入

4个3

2 1

1 3

3 4

4

3.

1 2 3

1 2 3

3.

输出

2

1

输入

4个3

2 3

3 4

4个1

1

3.

输出

1

请注意

考虑第一个例子。在第一个类型3查询中,我们有如下图。

在第一轮的过程中,贵族1比他所有的朋友(2和3)都弱,因此被杀死。在第一轮没有其他的贵族是脆弱的。在第二回合中,noble 3比他唯一的朋友noble 4弱,因此被杀死。此时,过程结束,答案是2。

代码

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 1001;
int main()
{
   int n,m;
   cin>>n>>m;
   map<int ,int>mp;
   int a,b;
   for(int i=0;i<m;i++)
   {
       cin>>a>>b;
       mp[min(a,b)]++;
   }
   int sky;
   cin>>sky;
   while(sky--)
   {
       int zo;
       cin>>zo;
       if(zo==3)
       {

           cout<<n-mp.size()<<endl;
       }
       if(zo==1)
       {
           cin>>a>>b;
           mp[min(a,b)]++;
           if(mp[min(a,b)]==0)
           mp.erase(min(a,b));
       }
       if(zo==2)
       {
           cin>>a>>b;
           mp[min(a,b)]--;
           if(mp[min(a,b)]==0)
           mp.erase(min(a,b));
       }
   }
}

补充

mp.size()

mp.erase()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值