WA60求调QWQ
查看原帖
WA60求调QWQ
382639
MK14roger楼主2023/12/13 10:21

#7~#10全部WA

#include <bits/stdc++.h>
using namespace std;

struct node{
	int vis=0;
	int from=0;
	vector<pair<int,int> > to;
};
vector<node> g[100010]={};
int cnt[100010]={},u=0,rnd=1;
bool isu[100010]={};

bool dfs(int x,int y,int b){
	b^=g[x][y].from;
	//cout<<rnd<<' '<<x<<' '<<y<<' '<<b<<"\n"; 
	if (x==u && y==0 && g[x][y].vis) return b;
	bool ret=0;
	for (auto p:g[x][y].to){
		int i=p.first,j=p.second;
		if (g[i][j].vis==0){
			g[i][j].vis=rnd;
			if (dfs(i,j,b)==1) ret=1;
		}
	}
	return ret;
}

void solve(){
	int n,m;cin>>n>>m;
	node k;k.to=vector<pair<int,int> >(0);
	for (int i=1;i<=n+3;i++){
		g[i]=vector<node>(0);cnt[i]=0;g[i].push_back(k);
		isu[i]=0;
	}
	isu[0]=0;
	u=0;
	for (int i=1;i<=m;i++){
		char c;cin>>c;
		if (c=='T'){
			int p;cin>>p;
			g[n+1][0].to.push_back({p,++cnt[p]});
			g[p].push_back(k);
		}
		else if (c=='F'){
			int p;cin>>p;
			g[n+2][0].to.push_back({p,++cnt[p]});
			g[p].push_back(k);
		}
		else if (c=='U'){
			int p;cin>>p;
			g[n+3][0].to.push_back({p,++cnt[p]});
			g[p].push_back(k);
		}
		else{
			int a,b;cin>>a>>b;
			g[b][cnt[b]].to.push_back({a,cnt[a]+1});
			cnt[a]++;
			g[a].push_back(k);
			if (c=='-') g[a][cnt[a]].from=1;
		}
	}
	for (int i=1;i<=n;i++) g[i][cnt[i]].to.push_back({i,0});
	isu[3]=1;
	rnd=1;
	u=0;
	dfs(n+1,0,0);
	rnd++;
	dfs(n+2,0,0);
	rnd++;
	dfs(n+3,0,0);
	for (int i=1;i<=n;i++){
		if (!g[i][0].vis){
			rnd++;u=i;
			isu[rnd]=dfs(i,0,0);
		}
	}
	int ans=0;
	for (int i=1;i<=n;i++){
		ans+=isu[g[i][0].vis];
	}
	cout<<ans<<"\n";
}

int main(){
	ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 
	int c,t;cin>>c>>t;
	while (t--) solve();
}
2023/12/13 10:21
加载中...