优化暴力+卡常+不可以总司令95分 暴力巅峰
查看原帖
优化暴力+卡常+不可以总司令95分 暴力巅峰
667763
jr_linys楼主2023/1/11 13:49

考场没打T3,T1 65, T2 40 全打挂,T4 24分,差死了。

今天翻出来着道题,简单推了下,打了个暴力。

加了个优化,把边以 vv 为下标用 vectorvector 储存,并且排序。

若修改边则二分,修改点则暴力,75分

加个快读,优化结构,90分

时间不够了,就

不可以总司令

然后就 95分

em,不加快读也一样95

95分代码

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#define TM 1.9
using namespace std;

const int N=5*1e5;
int n,m,q,cd[N+5],cd1;
vector<int> g[N+5];
vector<bool> vis[N+5];
char c;

int read(){
	while(c=getchar(),c<'0'||c>'9');
	int x=c-'0';
	while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0';
	return x;
}

int main(){
	n=read(),m=read();
	for(int i=1;i<=m;i++){
		int u=read(),v=read();
		g[v].push_back(u),vis[v].push_back(1);
		(!cd[u]?cd1++:(cd[u]==1?cd1--:0)),cd[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();
			int l=0,r=g[v].size(),mid;
			while(r-l>1) mid=l+r>>1,g[v][mid]<=u?l=mid:r=mid;
			mod>>1? (vis[v][l]=1,(!cd[u]?cd1++:(cd[u]==1?cd1--:0)),cd[u]++)
			: (vis[v][l]=0,cd[u]--,(!cd[u]?cd1--:(cd[u]==1?cd1++:0)));
		}else if(mod==2) for(int i=0;i<g[u].size();i++) vis[u][i]? vis[u][i]=0,v=g[u][i],cd[v]--,(!cd[v]?cd1--:(cd[v]==1?cd1++:0)):0;
		else for(int i=0;i<g[u].size();i++) !vis[u][i]? vis[u][i]=1,v=g[u][i],(!cd[v]?cd1++:(cd[v]==1?cd1--:0)),cd[v]++:0;
		cd1==n?puts("YES"):puts("NO");
		if (clock()>= TM * CLOCKS_PER_SEC) break;
	}
	if(q>0) while(q--) puts("NO");
}

为什么你总是说“不可以,总司令”?

据某项数据统计,没时间时都不可以正确率高达 9595%

2023/1/11 13:49
加载中...