CodeForces 263E
来源:互联网 发布:java可以有多个main 编辑:程序博客网 时间:2024/04/29 20:29
基本思想是
预处理所有点的度数,
对于每个点预处理出所有和它相邻并且度数比它大的点
集,
每个点集大小为
每次操作
#include<cstdio>#include<iostream>#include<cstring>#include<vector>#include<cmath>#include<map>using namespace std;const int N=50000+100;const int M1=150000+100;const int M=250000+100;int fi[N];int op[M],uu[M],vv[M];int n,m,o,q;int aa[M1],bb[M1];vector<int> ve[N],we[N];#define pb push_back#define pii pair<int,int>map<pii,int> mp;int du[N];void pri(int xx[N],int n){ for(int i=0;i<n;i++){ printf("%d ",xx[i]); }printf("\n");}void scc(){ scanf("%d",&o); for(int i=0;i<o;i++){ scanf("%d",&fi[i]); } //pri(fi,o); for(int i=0;i<m;i++){ int a,b;scanf("%d%d",&a,&b); if(a>b)swap(a,b); aa[i]=a,bb[i]=b; } //pri(aa,m); //pri(bb,m); char ss[10]; for(int i=0;i<q;i++){ scanf("%s",ss); if(ss[0]=='O'){ op[i]=0;scanf("%d",&uu[i]); } if(ss[0]=='F'){ op[i]=1;scanf("%d",&uu[i]); } if(ss[0]=='A'){ op[i]=2;scanf("%d%d",&uu[i],&vv[i]); if(uu[i]>vv[i])swap(uu[i],vv[i]); } if(ss[0]=='D'){ op[i]=3;scanf("%d%d",&uu[i],&vv[i]); if(uu[i]>vv[i])swap(uu[i],vv[i]); } if(ss[0]=='C'){ op[i]=4;scanf("%d",&uu[i]); } } //pri(op,q);}void sc(){ scc(); for(int i=1;i<=n;i++){ ve[i].clear();we[i].clear(); } mp.clear(); memset(du,0,sizeof(du)); for(int i=0;i<m;i++){ int a=aa[i],b=bb[i]; if(mp[pii(a,b)])continue; mp[pii(a,b)]=1; du[a]++;du[b]++; } for(int i=0;i<q;i++)if(op[i]==2){ int a=uu[i],b=vv[i]; if(mp[pii(a,b)])continue; mp[pii(a,b)]=1; du[a]++;du[b]++; } //pri(du,n+1); mp.clear(); for(int i=0;i<m;i++){ int a=aa[i],b=bb[i]; if(mp[pii(a,b)])continue; mp[pii(a,b)]=1; //printf("%d %d\n",a,b); if(du[b]>=du[a]){ ve[a].pb(b); we[a].pb(1); } else { ve[b].pb(a); we[b].pb(1); } } for(int i=0;i<q;i++)if(op[i]==2){ int u=uu[i],v=vv[i]; if(mp[pii(u,v)])continue; mp[pii(u,v)]=1; //printf("%d %d\n",u,v); if(du[u]>=du[v]){ ve[v].pb(u); we[v].pb(0); } else { ve[u].pb(v); we[u].pb(0); } }}int ans[N];void up(int u,int x){ for(int j=0;j<ve[u].size();j++)if(we[u][j]){ int v=ve[u][j]; //printf("%d %d %d %d\n",u,v,x,j); ans[v]+=x; }}int on[N];void cha(int u,int v){ for(int j=0;j<ve[u].size();j++)if(ve[u][j]==v){ if(on[u]){ if(we[u][j]){ ans[v]--; } else { ans[v]++; } } we[u][j]=!we[u][j]; return ; }}void que(int u){ int cnt=ans[u]; for(int j=0;j<ve[u].size();j++)if(we[u][j]){ int v=ve[u][j]; if(on[v])cnt++; } printf("%d\n",cnt);}void getans(){ memset(on,0,sizeof(on)); for(int i=0;i<o;i++){ on[fi[i]]=1; up(fi[i],1); } //pri(ans,n+1); for(int i=0;i<q;i++){ if(op[i]==0){ on[uu[i]]=1; up(uu[i],1); } if(op[i]==1){ on[uu[i]]=0; up(uu[i],-1); } if(op[i]==2){ cha(uu[i],vv[i]); cha(vv[i],uu[i]); } if(op[i]==3){ cha(uu[i],vv[i]); cha(vv[i],uu[i]); } if(op[i]==4){ que(uu[i]); } } //pri(op,q);}int main(){ #ifdef DouBi freopen("in.cpp","r",stdin); #endif // DouBi while(scanf("%d%d%d",&n,&m,&q)!=EOF){ sc(); memset(ans,0,sizeof(ans)); getans();// for(int i=1;i<=n;i++){// for(int j=0;j<ve[i].size();j++){// printf("%d ",ve[i][j]);// }printf(":%d\n",i);// } } return 0;}
0 0
- CodeForces 263E
- Codeforces Round #263 (Div. 2) E
- codeforces Round #263(div2) E解题报告
- codeforces 163E e-Government
- 【Codeforces 163E】E-Government
- Codeforces 78E Evacuation
- 【dp】codeforces 83E
- Codeforces 124 E
- Codeforces 231E
- Codeforces 231E - Cactus
- Codeforces #163 Div2 E
- codeForces 35E
- Codeforces 35E
- Playlist codeforces 268E
- Codeforces 148E(Porcelain)
- codeforces round#177 E
- codeforces 203E Transportation
- CodeForces 254 E Dormitory
- 关于mui 加载顺序摘要 ( plusReady(),DOMContentLoaded、onload)
- Android中插件开发篇之----动态加载Activity(免安装运行程序)
- WindowManager.LayoutParams详解
- 【php】微信公众帐号开发接口--消息回复
- [Wondgirl] 微信小程序(五)生命周期
- CodeForces 263E
- CSS中的静态定位、固定定位、绝对定位和相对定位
- Spring Spring mvc mybatis 经验小结(2)
- android实现平铺的一种方法
- Hadoop copyToLocalFile报java.lang.NullPointerException空指针异常
- MD5加盐处理数据库,保护数据安全
- android-学习-intent详解
- (0011) iOS 开发之模拟HTTP请求与响应,返回自己想要的报文。
- 大神博客