fork download
  1. //teja349
  2. #include <bits/stdc++.h>
  3. #include <vector>
  4. #include <set>
  5. #include <map>
  6. #include <string>
  7. #include <cstdio>
  8. #include <cstdlib>
  9. #include <climits>
  10. #include <utility>
  11. #include <algorithm>
  12. #include <cmath>
  13. #include <queue>
  14. #include <stack>
  15. #include <iomanip>
  16. //setbase - cout << setbase (16); cout << 100 << endl; Prints 64
  17. //setfill - cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
  18. //setprecision - cout << setprecision (14) << f << endl; Prints x.xxxx
  19. //cout.precision(x) cout<<fixed<<val; // prints x digits after decimal in val
  20.  
  21. using namespace std;
  22. #define f(i,a,b) for(i=a;i<b;i++)
  23. #define rep(i,n) f(i,0,n)
  24. #define fd(i,a,b) for(i=a;i>=b;i--)
  25. #define pb push_back
  26. #define mp make_pair
  27. #define vi vector< int >
  28. #define vl vector< ll >
  29. #define ss second
  30. #define ff first
  31. #define ll long long
  32. #define pii pair< int,int >
  33. #define pll pair< ll,ll >
  34. #define sz(a) a.size()
  35. #define inf (1000*1000*1000+5)
  36. #define all(a) a.begin(),a.end()
  37. #define tri pair<int,pii>
  38. #define vii vector<pii>
  39. #define vll vector<pll>
  40. #define viii vector<tri>
  41. #define mod (1000*1000*1000+7)
  42. #define pqueue priority_queue< int >
  43. #define pdqueue priority_queue< int,vi ,greater< int > >
  44. #define flush fflush(stdout)
  45. #define primeDEN 727999983
  46. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  47.  
  48. template <typename T>
  49. void printvec(vector<T>& vec){
  50. for(int i=0;i<vec.size();i++){
  51. cout<<vec[i]<<" ";
  52. }
  53. cout<<endl;
  54. }
  55.  
  56.  
  57. int a[1234][1234],b[1234][1234];
  58. int d[1234];
  59. vector<set<pii>> seti(1234);
  60. int useful[1234],corr[1234];
  61. int main(){
  62. std::ios::sync_with_stdio(false); cin.tie(NULL);
  63. int t;
  64. cin>>t;
  65. while(t--){
  66. int n,m;
  67. cin>>n>>m;
  68. int i,j;
  69. int hh=0;
  70. rep(i,n){
  71. cin>>d[i];
  72. hh+=d[i];
  73. }
  74.  
  75. rep(i,n){
  76. rep(j,m){
  77. cin>>a[i][j];
  78. }
  79. }
  80. rep(i,n){
  81. rep(j,m){
  82. cin>>b[i][j];
  83. }
  84. }
  85. if(hh==n){
  86. cout<<"YES"<<endl;
  87. cout<<2<<" "<<0<<endl;
  88. continue;
  89. }
  90. if(hh==0){
  91. int check=0;
  92. rep(i,n){
  93. check=1;
  94. rep(j,m){
  95. if(a[i][j]!=1 || b[i][j]==0)
  96. check=0;
  97. }
  98. if(check==1)
  99. break;
  100. }
  101. if(check){
  102. cout<<"NO"<<endl;
  103. continue;
  104. }
  105. cout<<"YES"<<endl;
  106. cout<<1<<" "<<m<<endl;
  107. rep(j,m){
  108. cout<<j+1<<" ";
  109. }
  110. cout<<endl;
  111. continue;
  112. }
  113. rep(j,m){
  114. useful[j]=1;
  115. }
  116. rep(i,n){
  117. corr[i]=0;
  118. seti[i].clear();
  119. }
  120. rep(i,n){
  121. rep(j,m){
  122. if(d[i] && !b[i][j]){
  123. useful[j]=0;
  124. }
  125. }
  126. }
  127.  
  128. rep(i,n){
  129. rep(j,m){
  130. if(useful[j]){
  131. if(b[i][j])
  132. corr[i]++;
  133. else
  134. continue;
  135. seti[i].insert(mp(a[i][j],j));
  136. }
  137. }
  138. }
  139. int left=0;
  140. rep(j,m){
  141. if(useful[j])
  142. left++;
  143. }
  144. set<pii>::iterator it;
  145. int flag=1,cas,maxi;
  146. int boo=0;
  147.  
  148. while(left){
  149. maxi=0;
  150. flag=0;
  151. cas=0;
  152. rep(i,n){
  153. if(d[i]){
  154. it=seti[i].end();
  155. it--;
  156. if(maxi<it->ff){
  157. maxi=it->ff;
  158. cas=it->ss;
  159. }
  160. }
  161. }
  162. rep(i,n){
  163. if(!d[i]){
  164. if(corr[i]<left)
  165. continue;
  166. it=seti[i].end();
  167. it--;
  168. if(it->ff<=maxi)
  169. flag=1;
  170. }
  171. }
  172. if(flag){
  173. useful[cas]=0;
  174. rep(i,n){
  175. if(b[i][cas]){
  176. corr[i]--;
  177. seti[i].erase(mp(a[i][cas],cas));
  178. }
  179. }
  180. left--;
  181. }
  182. else{
  183.  
  184. boo=1;
  185. cout<<"YES"<<endl;
  186. cout<<maxi<<" "<<left<<endl;
  187. rep(j,m){
  188. if(useful[j]){
  189. cout<<j+1<<" ";
  190. }
  191. }
  192.  
  193. cout<<endl;
  194. break;
  195. }
  196.  
  197. }
  198. if(flag){
  199. cout<<"NO"<<endl;
  200. }
  201.  
  202.  
  203.  
  204.  
  205. }
  206. return 0;
  207. }
Success #stdin #stdout 0s 27304KB
stdin
2
3 4
1 1 1
5 7 4 10
7 4 7 20
1 6 3 7
1 1 1 0
0 1 1 1
0 1 1 1
2 2
1 0
7 8
4 5
1 0
1 0
stdout
YES
2 0
NO