纯暴力95
查看原帖
纯暴力95
667763
jr_linys楼主2023/10/17 20:55

又是一年马上到CSP了,我又双翻出了这道题。

上次的卡时暴力AC帖

可是上次的代码太拉了,甚至都不能稳过,这次,我优化了代码,不卡时官方数据都能无压力跑到 9595,加了卡时自然稳A。

记录

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

const int N=5e5;
int n,m,q,cd[N+5],cd1;
vector<pair<int,bool>> g[N+5];

inline int read(){
	char c;
	while(c=getchar(),c<'0'||c>'9');
	int x=c^'0';
	while(c=getchar(),c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^'0');
	return x;
}
#define add(u) (!cd[u]?++cd1:(cd[u]==1?--cd1:0)),++cd[u]
#define del(u) --cd[u],(!cd[u]?--cd1:(cd[u]==1?++cd1:0))

int main(){
	n=read(),m=read();
	for(int i=1,u,v;i<=m;++i) u=read(),v=read(),g[v].push_back({u,1}),add(u);
	for(int i=1;i<=n;++i) if(g[i].size()>1) sort(g[i].begin(),g[i].end());
	q=read();
	while(q--){
		int mod=read(),u=read(),v;
		if(mod&1){
			v=read();
			auto l=g[v].begin(),r=g[v].end();
			while(r-l>1){
				auto mid=l+((r-l)>>1);
				(*mid).first<=u? l=mid:r=mid;
			}
			if(mod>>1) (*l).second=1,add(u);
			else (*l).second=0,del(u);
		}else if(mod==2){
			for(auto &x:g[u]) if(x.second) x.second=0,del(x.first);
		}else{
			for(auto &x:g[u]) if(!x.second) x.second=1,add(x.first);
		}
		puts(cd1==n?"YES":"NO");
		if(clock()*100>=CLOCKS_PER_SEC*196) break;
	}
	if(q>0) while(q--) puts("NO");
}
2023/10/17 20:55
加载中...