#include #pragma GCC optimize ("Ofast") #pragma GCC target("avx2") using namespace std; int n,k; float eps = 1e-9; int solveLinear(vector>& A, vector& b, vector&x){ int n= A.size(); int m = x.size(); int rank = 0; int br, bc; if(n) assert(A[0].size() == m); vector col(m); iota(col.begin(), col.end(), 0); for(int i=0; ibv) br=r, bc=c, bv=v; if(bv<=eps){ for(int j=i; j eps) return -1; break; } swap(A[i], A[br]); swap(b[i], b[br]); swap(col[i], col[bc]); for(int j=0; j>& A, int start = 0) { int r = -1; for (int i = start; i < k; i++) { float bv = 0, br = -1; for (int j = r+1; j < n; j++) { if (A[j][i] > bv) { bv = A[j][i]; br = j; } } if (br == -1) continue; swap(A[r+1], A[br]); r++; for (int j = r+1; j < n;j++) { float factor = A[j][i] / A[r][i]; for (int ni = i; ni < k; ni++) { A[j][ni] -= A[r][ni]*factor; } } } } bool check(vector>& mat, int l, int r){ int piv = -1; int pivots = 0; for (int i = l; i <= r; i++) { for (int j = n-1; j> piv; j--) { if (fabs(mat[j][i]) > eps) { piv = j; pivots++; break; } } } return (r - l + 1) > pivots; } int main(){ cin>>n>>k; // [vertex][type] vector> mat(n, vector(k, 0)); for(int i=0; i>n; for(int j=0; j>u>>v; u--;v--; mat[u][i]--; mat[v][i]++; } } int INF = 100000000; int res = INF; int r = 0; vector rhs(n, 0), out(k, 0); vector min_nonzero(k, -1); for (int i = 0; i < k; i ++) { for (int j = n-1; j >= 0; j--) { if (fabs(mat[j][i]) > eps) { min_nonzero[i] = j; break; } } if (min_nonzero[i] == -1) { cout << 1 << '\n'; return 0; } } for(int l = 0; l=k) goto end; } res = min(res, r-l+1); } end : cout << (res == INF?-1 : res) << endl; }