1 条题解
-
0
C :
#include <stdio.h> #include <stdlib.h> #define N 1010 int f[N], a[N][N], c[N]; int find(int v){ if(f[v] == v)return v; int F = find(f[v]); f[v] = F; return F; } int main() { int n; while(scanf("%d",&n) != EOF){ for(int i = 1;i <= n; i++){ f[i] = i; c[i] = 1; } for(int i = 1;i <= n; i++){ scanf("%d",&a[i][0]); for(int j = 1;j <= a[i][0]; j++){ scanf("%d",&a[i][j]); } } for(int i = n;i >= 1; i--){ for(int j = 1;j <= a[i][0]; j++){ if(a[i][j]>i){ int r1 = find(i); int r2 = find(a[i][j]); if(r1 != r2){ f[r2] = r1; c[r1] += c[r2]; if(c[r1]>(n>>1)){ printf("%d\n",i); return 0; } } } } } } return 0; }C++ :
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int f[1001],n,a[1001][1001],count[10001]; void init(); int find(int); void work(); int main() { //freopen("black0.in","r",stdin); init(); work(); return 0; } void init() { cin>>n; for(int i=1;i<=n;i++) { count[i]=1; f[i]=i; } memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) { cin>>a[i][0]; for(int j=1;j<=a[i][0];j++) cin>>a[i][j]; } } void work() { for(int i=n;i>0;i--) { for(int j=1;j<=a[i][0];j++) { if(a[i][j]>i) { int x,y; x=find(i); y=find(a[i][j]); if(x!=y) { f[y]=x; count[x]+=count[y]; if(count[x]>(n+1)/2) { cout<<i<<endl; return; } } } } } } int find(int x) { if(f[x]==x) return x; f[x]=find(f[x]); return f[x]; }
- 1
信息
- ID
- 1448
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者