C. Web of Lies
链接: link.
题目:
题意:
在一个关系图中,如果某个点有相连的点且相连的点数值大于它,那么他就会面临出局,操作1为加边,操作2为删边,操作三则为输出此时未出局人数。
题解:
因为如果它有比它数值大的连线点即意为他会面临出局,直至只有孤立节点,所以,计数所有有大于它本身数值的朋友的点的个数,再用总人数相减。
#include<bits/stdc++.h>
using namespace std;
int vis[200010];
int main()
{
int n,m;
cin>>n>>m;
int x,y;
int cnt=0;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
if(x>y)
{
if(!vis[y])cnt++;
vis[y]++;
}
else
{
if(!vis[x])cnt++;
vis[x]++;
}
}
int t;
cin>>t;
int a,b,c;
while(t--)
{
cin>>a;
if(a==1)
{
cin>>b>>c;
if(b>c)
{
if(!vis[c])cnt++;
vis[c]++;
}
else
{
if(!vis[b])cnt++;
vis[b]++;
}
}
else if(a==2)
{
cin>>b>>c;
if(b>c)
{
vis[c]--;
if(!vis[c])cnt--;
}
else
{
vis[b]--;
if(!vis[b])cnt--;
}
}
else
{
cout<<n-cnt<<endl;
}
}
}