#include #include #include #include #include using namespace std; struct flow { int sx,sy,ex,ey,ind; }; flow f[555]; int n,k,b,op,res,brcon,brwater,bx[555],by[555]; bool mark[111][111],markf[111][111]; pair q[33555],pr[333555],last[111][111]; vector< pair > resniz[555],reskon[555]; int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1}; bool unutra(int x, int y) { return (x>=0 && x=0 && y p; q[1] = make_pair(tf.sx,tf.sy); memset(markf,0,sizeof(markf)); markf[tf.sx][tf.sy] = true; last[tf.sx][tf.sy] = make_pair(-1,-1); poc = 0; kr = 1; bb = false; //printf("-----\n"); while(poc < kr && !bb) { poc++; p = q[poc]; //printf("~ %d %d - %d %d\n", poc, kr, p.first, p.second); for(s=0; s<4; s++) { px = p.first + dx[s]; py = p.second + dy[s]; if (!markf[px][py] && !mark[px][py] && unutra(px,py)) { kr++; q[kr] = make_pair(px,py); markf[px][py] = true; last[px][py] = p; //printf("%d %d -> %d %d\n", px, py, p.first, p.second); if (px == tf.ex && py == tf.ey) { bb = true; break; } } } op += 5; // mozda i manje! } if (bb) { brcon++; p = make_pair(tf.ex,tf.ey); i = tf.ind; bb = false; while(p.first != -1) { brwater++; resniz[i].push_back(p); mark[p.first][p.second] = true; p = last[p.first][p.second]; if (p.first == tf.sx && p.second == tf.sy) bb = true; } //printf("---> %d %d - %d %d\n %d %d - %d %d\n", tf.sx, tf.sy, tf.ex, tf.ey, resniz[i][0].first, resniz[i][0].second, resniz[i][resniz[i].size()-1].first, resniz[i][resniz[i].size()-1].second); /*if (!bb) { p = make_pair(tf.ex,tf.ey); while(p.first != -1) { printf("~ %d %d\n", p.first, p.second); p = last[p.first][p.second]; } system("pause"); }*/ } } void saveres() { for(int i=1; i<=k; i++) { reskon[i] = resniz[i]; } } int main() { freopen("flow.in", "r", stdin); freopen("flow.out", "w", stdout); int i,j,t,l; flow pf; scanf("%d%d", &n, &k); for(i=1; i<=k; i++) { scanf("%d%d%d%d", &f[i].sx, &f[i].sy, &f[i].ex, &f[i].ey); f[i].ind = i; } scanf("%d", &b); for(i=0; i %d\n", i); resniz[f[i].ind].clear(); if (!mark[f[i].sx][f[i].sy] && !mark[f[i].ex][f[i].ey]) { tryconnect(f[i]); } //printf("--> %d\n", i); } t = brcon * brwater; if (t > res) { res = t; saveres(); } //op += k*n*n; } for(i=1; i<=k; i++) { l = reskon[i].size(); printf("%d ", l); for(j=0; j=0; j--) { printf("%d %d ", pr[j].first, pr[j].second); } printf("\n");*/ } return 0; }