P1955 [NOI2015] 程序自动分析(求助)
  • 板块学术版
  • 楼主Hesibo
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/11/23 17:45
  • 上次更新2023/10/27 01:48:51
查看原帖
P1955 [NOI2015] 程序自动分析(求助)
550077
Hesibo楼主2022/11/23 17:45

求助

程序自动分析

竟然给我9个WA和1个TLE;

?┗|`O′|┛

#include<bits/stdc++.h>
using namespace std;
int father[100010];
struct node{
	int a,b;
	int h;
	bool operator<(const node &k)const{
		return h>k.h;
	}
}f[1000010];
int Find(int x){
	if(x==father[x]) return x;
	else return father[x]=Find(father[x]);
}
void Merge(int x,int y){
	father[Find(x)]=Find(y);
}
int main(){
	int t;
	cin>>t;
	while(t--){
		vector<int> s;
		int n;bool flag;int x,y;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>f[i].a>>f[i].b>>flag;
			s.push_back(f[i].a);
			s.push_back(f[i].b);
		}
		sort(s.begin(),s.end());
		s.erase(unique(s.begin(),s.end()),s.end());
		for(int i=1;i<=n;i++){
			f[i].a=lower_bound(s.begin(),s.end(),f[i].a)-s.begin();
			f[i].b=lower_bound(s.begin(),s.end(),f[i].b)-s.begin();
		}
		for(int i=1;i<=s.end()-s.begin();i++)
			father[i]=i;
        sort(f+1,f+n+1);
        for(int i=1;i<=n;i++){
			if(f[i].h) Merge(f[i].a,f[i].b);
			else if(f[i].a==f[i].b) flag=false;
		}
		if(flag)
		printf("%s\n","YES");
		else
		printf("%s\n","NO");
	}
	return 0;
}
2022/11/23 17:45
加载中...