# include using namespace std; const long long MAXN = 1e6; const long long MAXS = 1e7; vector > p; map taken; struct edge { long long to, rev, flow, cap, cost; edge() { to = 0; rev = 0; flow = 0; cap = 0; cost = 0; } edge(long long _to, long long _rev, long long _flow, long long _cap, long long _cost) { to = _to; rev = _rev; flow = _flow; cap = _cap; cost = _cost; } }; vector g[MAXN]; void add_edge(long long u, long long v, long long w, long long c) { edge ed1 = edge(v,g[v].size(),0,w,c); edge ed2 = edge(u,g[u].size(),0,0,-c); g[u].push_back(ed1); g[v].push_back(ed2); } map mp; long long num = 1; long long dist[MAXN]; const long long inf = LONG_MAX; long long s = 0; long long t = 1; bool is_inside[MAXN]; deque q; long long par_idx[MAXN],par[MAXN]; bool spfa() { for(long long i = 0; i <= num; i++) dist[i] = inf; dist[t] = inf; q.clear(); dist[s] = 0; is_inside[s] = true; q.push_back(s); while(!q.empty()) { long long u = q.front(); is_inside[u] = false; q.pop_front(); for(long long i = 0; i < g[u].size(); i++) if(g[u][i].cap > g[u][i].flow && dist[u] + g[u][i].cost < dist[g[u][i].to]) { dist[g[u][i].to] = dist[u] + g[u][i].cost; par_idx[g[u][i].to] = i; par[g[u][i].to] = u; if(is_inside[g[u][i].to]) continue; if(!q.empty() && dist[g[u][i].to] > dist[q.front()]) q.push_back(g[u][i].to); else q.push_front(g[u][i].to); is_inside[g[u][i].to] = true; } } return dist[t] != inf; } long long mc_max_flow(long long n) { long long f = 0, ret = 0; while( spfa()) { long long u = t; long long mn_flow = inf; while(u != s) { mn_flow = min(mn_flow, g[par[u]][par_idx[u]].cap - g[par[u]][par_idx[u]].flow); u = par[u]; } u = t; while(u != s) { // cout << u << "->"; g[par[u]][par_idx[u]].flow += mn_flow; g[u][g[par[u]][par_idx[u]].rev].flow -= mn_flow; ret += g[par[u]][par_idx[u]].cost * mn_flow; u = par[u]; } // cout<> n; long long i,j,x; for(i = 1; i<=n; i++) { cin>>x; num++; add_edge(0,num,1,0); // cout<<"row: "<>p[j].second >> p[j].first; p[j].first = MAXS-p[j].first; } sort(p.begin(),p.end()); long long br = 0; for(j = 0; j