// OBčh2009 Day2 G : Defend the Bases #include #include #include #include #include #include using namespace std; class Edge{ public: int p, q; double cost; Edge(int p, int q, double cost) : p(p), q(q), cost(cost) {} bool operator < (const Edge &e) const { return cost > e.cost; } }; const int INF = 10000000; int cap[202][202]; double cost[202][202]; int maximumFlow(int s, int t, int n, double upper){ int res = 0; while(true){ vector prev(n,-1); prev[s] = 0; queue qu; qu.push(s); while(!qu.empty()){ int e = qu.front(); qu.pop(); for(int i=0;i upper) continue; if(cap[e][i]>0&&prev[i]<0){ prev[i] = e; qu.push(i); } } } if(prev[t]<0) return res; for(int i=t;i!=prev[i];i=prev[i]) cap[prev[i]][i]--, cap[i][prev[i]]++; res++; } return res; } int main(){ int n, m; while(cin >> n >> m, n){ int x[100], y[100], v[100], xx[100], yy[100]; vector dst; int capa[202][202]; memset(capa, 0, sizeof(capa)); for(int i=0;i> x[i] >> y[i] >> v[i]; for(int i=0;i> xx[i] >> yy[i]; for(int i=1;i<=n;i++) capa[0][i] = 1; for(int i=1;i<=n;i++){ for(int j=n+1;j<=n+m;j++) capa[i][j] = 1; } for(int j=n+1;j<=n+m;j++) capa[j][n+m+1] = 1; for(int i=0;i