提交时间:2026-01-07 20:56:05
运行 ID: 39276
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long double db; typedef long long ll; const db eps=1e-7; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,m,k[505],res[505]; db a[505][505]; void slv(){ n=read(),m=read(); up(i,1,m)k[i]=read(); up(i,1,n+1)while(k[i]--)a[read()][i]=1; int x=0,id=-1; up(i,1,n+1){ int p=++x; up(j,x+1,n)if(abs(a[j][i])>abs(a[p][i]))p=j; if(abs(a[p][i])<eps){--x;id=i;continue;} swap(a[p],a[x]); up(j,1,n)if(j!=x){ db v=a[j][i]/a[x][i]; up(k,1,n+1)a[j][k]-=a[x][k]*v; } } res[id]=1; up(i,1,n) up(j,1,n+1)if(j!=id)if(abs(a[i][j])>eps&&abs(a[i][id])>eps){ if((a[i][j]>0)^(a[i][id]>0))res[j]=1; else res[j]=-1; break; } int c0=0,c1=0; up(i,1,n+1)c0+=res[i]==1,c1+=res[i]==-1; printf("%d %d\n",c0,c1); up(i,1,n+1)if(res[i]==1)printf("%d ",i);puts(""); up(i,1,n+1)if(res[i]==-1)printf("%d ",i);puts(""); } int main(){ //freopen("moon.in","r",stdin),freopen("moon.out","w",stdout); slv(); return 0; }