写了依托答辩,wa #1 5 7 9,TLE # 4 6 8 10
查看原帖
写了依托答辩,wa #1 5 7 9,TLE # 4 6 8 10
1245705
chenhaoyang2008楼主2024/10/21 13:33

我是傻*,写了依托答辩,wa #1 5 7 9,TLE # 4 6 8 10

没见过如此五彩斑斓的结果。 郁闷,调了一中午,实在没辙了,前来求助。

代码:

#include<bits/stdc++.h>
using namespace std;
int c,t,n,m,i,j;
int anss;
char vs; 

struct a{
	char value=0; //F:false T:true U:unknown
	int father=0;
	bool turnback; //0 一致  1 反转 
} v[100005];
short visitdeep[100005];

inline char turnback(char a){
	if(a=='U') return 'U';
	if(a=='T') return 'F';
	if(a=='F') return 'T'; 
    return 0;
}

char get(int now,int deepth){
	if(v[now].value!=0){
		return v[now].value;
	}
	if(v[now].father==0&&v[now].value==0){
		v[now].value='T';
		return 'T';
	} 
	char ans=0;
	if(visitdeep[now]>=0){
		if((deepth-visitdeep[now])%2==1) {
			v[now].value='U';
			return 'U';
		}
		else{
			v[now].value='T';
			return 'T';
		}
	}
	visitdeep[now]=deepth;
	if(v[now].turnback){
		ans=turnback(get(v[now].father,deepth+1));
		v[now].value=ans;
		return ans;
	}
	else {
		ans=get(v[now].father,deepth);
		v[now].value=ans;
		return ans;
	}
}

int main(){
	int l;
	cin>>c>>t;
	int ans=0;
	for(;t>0;t--){
		memset(v,0,sizeof(v));
		cin>>n>>m;
		l=m;
		anss=0;
		for(;m>0;m--){
			cin>>vs;
			switch(vs){
				case 'T':
					cin>>i;
					v[i].value='T';
					break;
				case 'F':
					cin>>i;
					v[i].value='F';
					break;
				case 'U':
					cin>>i;
					v[i].value='U';
					break;
				case '+':
					cin>>i>>j;
					v[i].father=j;
					v[i].turnback=false;
					break;
				case '-':
					cin>>i>>j;
					v[i].father=j;
					v[i].turnback=true;
					break;
			}
		}
		
		for(int i=1;i<=n;i++){
			memset(visitdeep,0xff,sizeof(visitdeep));
			if(get(i,0)=='U') anss++;
		}
		cout<<anss<<endl;
	}
} 

谁知道哪里错了?谢谢各位大神。

2024/10/21 13:33
加载中...