很奇怪的问题
  • 板块学术版
  • 楼主Sweet_2013
  • 当前回复11
  • 已保存回复11
  • 发布时间2025/7/30 10:21
  • 上次更新2025/7/30 15:20:45
查看原帖
很奇怪的问题
1570347
Sweet_2013楼主2025/7/30 10:21
#include <bits/stdc++.h>
using namespace std;
int f[1005],l[1005],n,m,t;
vector<int>lb[1005];
int fd(int x){
    if(f[x]==x)return x;
    else return f[x]=fd(f[x]);
}
void hb(int i,int j){
    if(fd(i)!=fd(j)){
        l[fd(j)]+=l[fd(i)];
        f[fd(i)]=fd(j);
    }
}
int main(){  
	//freopen("black.in","r",stdin);
	//freopen("black.out","w",stdout);     
    cin>>n;
    for(int j=1;j<=n;j++){ 
        cin>>m;   
        for(int i=1;i<=m;i++){
            cin>>t;
            lb[j].push_back(t);
            lb[t].push_back(j); 
        }
    }
    for(int i=1;i<=n;i++){
	    f[i]=i;
	    l[i]=1;
	}
    for(int k=n;k>=1;k--){
    	for(int i:lb[k])if(i>k)hb(k,i);
        if(l[fd(k)]>n/2){
            cout<<k;
            return 0;
        } 
    }
}

大家都知道,这个代码输入以下数据:

7
2 2 5
3 1 3 4
2 2 4
2 2 3
3 1 6 7
2 5 7
2 5 6

是会输出1的,这个样例能过但是它在老师那边测出来了 CE,是for(int i:lb[k])的问题,于是我把它改成了for(size_t i=0;i<lb[k].size();i++),输出了2

求问这是怎么回事,该改成什么?玄小号一关

2025/7/30 10:21
加载中...