Codeforces Round #736 (Div. 2)C. Web of Lies(結論)

題目大意:

一張圖,若於a相連點的序號都比a大則a可刪除。
q次詢問
od=1 x,y 給xy連邊
od=2 x,y 給xy刪邊
od=3 詢問幾個點沒被刪除

題解:發現有連鎖反應,只要某點所連接的點中有序號比它大的就一定會被刪除。

#include<bits/stdc++.h>
using namespace std;

const int N=2e5+8;

int n,m;
int q;
int rd[N];

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		if(x>y) rd[y]++;
		else rd[x]++;
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		if(!rd[i]) ans++;
	}
	scanf("%d",&q);
	while(q--)
	{
		int od;
		scanf("%d",&od);
		if(od==1)
		{
			int x,y;
			scanf("%d%d",&x,&y);
			if(x>y)
			{
				rd[y]++;
				if(rd[y]==1) ans--;
			}else
			{
				rd[x]++;
				if(rd[x]==1) ans--;
			}
		}
		if(od==2)
		{
			int x,y;
			scanf("%d%d",&x,&y);
			if(x>y)
			{
				rd[y]--;
				if(rd[y]==0) ans++;
			}else
			{
				rd[x]--;
				if(rd[x]==0) ans++; 
			}
		}
		if(od==3) cout<<ans<<endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章