考场没打T3,T1 65, T2 40 全打挂,T4 24分,差死了。
今天翻出来着道题,简单推了下,打了个暴力。
加了个优化,把边以 v 为下标用 vector 储存,并且排序。
若修改边则二分,修改点则暴力,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");
}
为什么你总是说“不可以,总司令”?
据某项数据统计,没时间时都不可以正确率高达 95。