90pts求调
查看原帖
90pts求调
367998
Eason_wu楼主2023/11/10 19:28

https://www.luogu.com.cn/record/134337986

#include<bits/stdc++.h>
#define fr(ii,ss,tt) for(int ii=ss;ii<=tt;ii++)
#define pii pair<int,int>
#define pt printf
#define fi first
#define eb emplace_back
#define Int long long
#define se second
using namespace std;
void rd(){}template<typename T, typename... args> void rd(T&x, args&...y) {char ch;bool f = 0;for (ch = getchar(); ch < '0' || '9' < ch; ch = getchar())if (ch == '-')f = 1;for (x = 0; '0' <= ch && ch <= '9'; ch = getchar())x = (x << 1) + (x << 3) + ch - '0';if (f)x = -x;rd(y...);}
const int N = 1e6 + 33,inf=2e9;
int vis[N];vector<int> s[N];
void so(){
	int n;
	rd(n);
	fr(i,1,n){
		vis[i]=0;
		s[i].clear();
		int cnt;
		rd(cnt);
		s[i].reserve(cnt);
		fr(j,1,cnt){
			int x;
			rd(x);
			s[i].eb(x);
		}
	}
	vector<int>o(n+1);
	iota(o.begin(),o.end(),1);
	sort(o.begin(),o.end(),[&](int i,int j){
		return 	s[i].size()>s[j].size();
	});
	for(int&i:o){
		if(s[i].empty())continue;
		int all=vis[*s[i].begin()];
		auto it=find_if(s[i].begin(),s[i].end(),[&](int x){
			return vis[x]!=all;
		});
		if(it==s[i].end()){
			for(int&x:s[i]){
				vis[x]=i;
			}
		}else{
			int ans=-1;
			for(int&ti:s[i]){
				if(!vis[ti])continue;
				if(ans==-1||s[vis[ti]].size()<s[ans].size()){
					ans=vis[ti];assert(ans!=i);
				}
			}
			assert(ans!=-1);
			pt("YES\n%d %d\n",ans,i);
			return;
		}
	}
	pt("NO\n");
	//output:Y/N sol
}
int main() {
	int T;
	rd(T);
	fr(i,1,T)so();
	return 0;
}
2023/11/10 19:28
加载中...