/ tabris /

记录详情

Runtime Error


  
# 状态 耗时 内存占用
#1 Wrong Answer 2ms 1.441 MiB
#2 Wrong Answer 2ms 1.391 MiB
#3 Wrong Answer 112ms 1.328 MiB
#4 Wrong Answer 1ms 1.441 MiB
#5 Wrong Answer 29ms 1.32 MiB
#6 Runtime Error 6ms 1.438 MiB

代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m,fa[100005],c=1,cnt,T,num[100005],r[100005],ans;
inline void init(){
	ans=n; cnt=n;
	for(int i=1;i<=n;++i) r[i]=i,fa[i]=i,num[i]=1;
}
inline int find(int x){
	if(fa[x]==x) return x;
	else return fa[x]=find(fa[x]);
}
inline void initup(){
	memset(r,0,sizeof(r));
	memset(fa,0,sizeof(fa));
	memset(num,0,sizeof(num));
}
int main(){
	//freopen("game.in","w",stdin);
	//freopen("game.out","r",stdout);
	scanf("%d",&T);
	while(T--){
		printf("Case #%d\n",c);
		initup();
		scanf("%d%d",&n,&m);
		init();
		while(m--){
			string s; int x,y;
			cin>>s;
			if(s=="query"){
				printf("%d\n",ans);
			}
			if(s=="fight"){
				scanf("%d%d",&x,&y);
				int xx=find(r[x]),yy=find(r[y]);
				if(xx==yy) continue;
				else if(num[xx]<num[yy]){
					printf("%d is winner\n",y);
					fa[xx]=yy;
					num[yy]+=num[xx];
					ans--;
				}
				else if(num[xx]>num[yy]){
					printf("%d is winner!\n",x);
					fa[yy]=xx;
					num[xx]+=num[yy];
					ans--;
				}
				else printf("Either is winner!\n");
			}
			if(s=="tempt"){
				scanf("%d%d",&x,&y);
				int xx=find(r[x]),yy=find(r[y]);
				if(xx!=yy){
					if(num[yy]==1) ans--;
					r[y]=++cnt;
					fa[r[y]]=r[x];
					num[xx]++; num[yy]--;
				}
			}
			if(s=="revolt"){
				scanf("%d",&x);
				int xx=find(r[x]);
				if(num[xx]==1) continue;
				num[xx]--;
				r[x]=++cnt;
				fa[r[x]]=r[x];
				num[r[x]]=1;
				ans++;
			}
		}
	}
}

信息

递交者
类型
递交
题目
幼儿园战争
语言
C++
递交时间
2019-10-02 16:36:57
评测时间
2019-10-02 16:36:57
评测机
分数
0
总耗时
155ms
峰值内存
1.441 MiB