1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| #include<bits/stdc++.h> #define pt putchar(' ') #define nl puts("") #define pi pair<int,int> #define pb push_back #define go(it) for(auto &it:as[x]) using namespace std;
const int N=610; int n,m,cnt; int a[N],p[N][N],S[N],T[N],dead[N],now[N];
int fr(){ int x=0,flag=1; char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') flag=-1; ch=getchar(); } while(ch>='0' && ch<='9'){ x=x*10+(ch-'0'); ch=getchar(); } return x*flag; } void fw(int x){ if(x<0) putchar('-'),x=-x; if(x>9) fw(x/10); putchar(x%10+'0'); } int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} bool cop(int a,int b){return T[a]<T[b];}
bool check() { memset(T,0x3f,sizeof T); memset(dead,0,sizeof dead); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { int x=p[i][j]; if(S[x]) T[x]=min(T[x],a[i]); else if(!dead[x]) {dead[x]=1;break;} } int idx=0; for(int i=1;i<=n;i++) if(S[i]) now[++idx]=T[i]; sort(now+1,now+1+idx); for(int i=1;i<=idx;i++) if(i>now[i]) return 0; return 1; }
int main() { n=fr(),m=fr(); for(int i=1;i<=m;i++) a[i]=fr(); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) p[i][j]=fr(); for(int i=1;i<=n;i++) S[i]=1,S[i]=check(); check(); int idx=0; for(int i=1;i<=n;i++) if(S[i]) now[++idx]=i; sort(now+1,now+1+idx,cop); for(int i=1;i<=idx;i++) fw(now[i]),pt; return 0; }
|