void initFlow(int _T) { T= _T; cost.resize(T); cap.resize(T); for(int i=0;i<T;i++) { cost[i].resize(T); cap[i].resize(T); } deg.resize(T); adjList.resize(T); }
/*void d1s2(VVI &inp){ int val = 0; int n=inp.size(); STACK sti,stj; for(int i=0;i<n;i++){ for(int j=0;j<=i;j++){ } emptyStacks(inp,sti,stj,val); } } void d2s1(VVI &inp){ int val = 0; int n=inp.size(); STACK sti,stj; for(int i=0;i<n;i++){ for(int j=0;j<=i;j++){ } emptyStacks(inp,sti,stj,val); } } void d2s2(VVI &inp){ int val = 0; int n=inp.size(); STACK sti,stj; for(int i=0;i<n;i++){ for(int j=0;j<=i;j++){ } emptyStacks(inp,sti,stj,val); } }*/ int main(){ int n; char c; cin>>n; VVI inp; inp.resize(n); for(int i=0;i<n;i++){ inp[i].resize(n); for(int j=0;j<n;j++){ cin>>c; if(c=='.'){ inp[i][j]=0; } else { inp[i][j]=1; } } } // horizontal scan; hs(inp); d1s1(inp); //s2(inp); d2s1(inp);d2s2(inp); for(int l=0;l<n;l++){ for(int m=0;m<n;m++){ cout<<inp[l][m]; if(m<n-1){ cout<<" "; } } cout<<endl; } }
void levelOrder(TreeNode* root, int iDeepth, VVI& result) { if (!root) return; if (iDeepth >= result.size()) result.resize(iDeepth + 1); result[iDeepth].push_back(root->val); levelOrder(root->left, iDeepth + 1, result); levelOrder(root->right, iDeepth + 1, result); }
vector<vector<int>> generate(int numRows) { VVI aiResult; aiResult.resize(numRows); for (int i = 0; i < numRows; ++i) { for (int j = 0; j <= i; ++j) aiResult[i].push_back((0 == j || i == j) ? 1 : (aiResult[i - 1][j] + aiResult[i - 1][j - 1])); } return aiResult; }
VVI transpose(VVI v){ VVI result; result.resize(v.size()); for(int i=0;i<result.size();i++) result[i].resize(v.size()); for(int i=0;i<v.size();i++){ for(int j=0;j<v.size();j++){ result[j][v.size() - 1 - i] = v[i][j]; } } return result; }
set<VT> LCSall(VT& A, VT& B) { VVI dp; int n = A.size(), m = B.size(); dp.resize(n+1); for(int i=0; i<=n; i++) dp[i].resize(m+1, 0); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { if(A[i-1] == B[j-1]) dp[i][j] = dp[i-1][j-1]+1; else dp[i][j] = max(dp[i-1][j], dp[i][j-1]); } set<VT> res; backtrackall(dp, res, A, B, n, m); return res; }
int main() { int N, M; while (cin >> N >> M) { int a, b; VVI w; VI mr; VI mc; w.resize(N); for (int i = 0; i < N; ++i) { w[i].resize(N); for (int j = 0; j < N; ++j) { w[i][j] = 0; } } for (int i = 0; i < M; ++i) { cin >> a >> b; w[a][b] = 1; } int numMatches = BipartiteMatching(w, mr, mc); if (numMatches == N) { cout << "YES\n"; } else { cout << "NO\n"; } } return 0; }
VT LCS(VT& A, VT& B) { VVI dp; int n = A.size(), m = B.size(); dp.resize(n+1); for(int i=0; i<=n; i++) dp[i].resize(m+1, 0); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { if(A[i-1] == B[j-1]) dp[i][j] = dp[i-1][j-1]+1; else dp[i][j] = max(dp[i-1][j], dp[i][j-1]); } VT res; backtrack(dp, res, A, B, n, m); reverse(res.begin(), res.end()); return res; }
void solve(){ sort(ALL(D)); fuInit(k); sol.resize(k); int u,v; int cost = 0; int cnt = 0; for(auto e : D){ u = get<1>(e); v = get<2>(e); //cout << get<0>(e) << " " << u << " " << v << endl; int ru=fuFind(u), rv=fuFind(v); if (ru != rv){ fuUnion(ru,rv); cost += get<0>(e); cnt++; sol[u].PB(v); sol[v].PB(u); } } cost += full*(k-cnt); printf("%d\n",cost); DFS(); }
int main(){ //freopen("in.txt","r",stdin); freopen("g1.in","r",stdin); freopen("g1.out","w",stdout); int n; scanf("%d",&n); points.resize(n); V.resize(n); for(int i = 0; i < n; ++i){ scanf("%d %d",&points[i].first,&points[i].second); } MST(points,V,n); memset(colors,-1,sizeof(colors)); dfs(0); int ans = inf; for(int i = 0; i < n; ++i) for(int j = i+1; j < n; ++j){ if(colors[i] == colors[j]) ans = min(ans,dist(i,j)); } printf("%.6lf\n",sqrt(0.0+ans)/2); for(int i = 0; i < n; ++i) printf("%d ",colors[i]+1); return 0; }
int main() { #ifndef ONLINE_JUDGE freopen ("in.txt", "r", stdin); // freopen ("out.txt", "w", stdout); #endif int n,m; VI P; VVI rooms; numTest(t) { cin>>n>>m; rooms.resize(n); P.resize(m); scana(P, m); REP(j,n) { int num; cin>>num; rooms[j].resize(num); scana(rooms[j], num); sort(rooms[j]); } // PR0(P,m); // REP(i,n) // PR0(rooms[i],sz(rooms[i])); ULL vol = 0; REP(i,m) { int s = sz(rooms[P[i]]); if(s != 0) { vol += rooms[P[i]][s-1]; rooms[P[i]].pop_back(); } }
void exact(VVI v) { if(v.size() == 0) { if(selected < glob[0].size() - 1) return; set<int> newelem; for(int i = 0; i < sol.size(); ++i) { newelem.insert(sol[i]); } sols.insert(newelem); /* cout<<"Solution:"<<endl; vector<int> sum(glob[0].size() - 1); for(int i = 0; i < sol.size(); ++i) { cout<<sol[i]<<endl; for(int j = 0; j < glob[sol[i]].size() - 1; ++j) { sum[j] += glob[sol[i]][j]; } } for(int i = 0; i < sum.size(); ++i) { cout<<sum[i]<<" "; } cout<<endl; cout<<"---------"<<endl; */ return; } for(int r = 0; r < v.size(); ++r) { if(v[r][0] == 1) { set<int> dc; set<int> dr; for(int j = 0; j < v[r].size() - 1; ++j) { if(v[r][j]) { for(int i = 0; i < v.size(); ++i) { if(v[i][j]) { dr.insert(i); } } dc.insert(j); } } /* set<int>::iterator it; cout<<"Banned columns: "<<endl; for(it = dc.begin(); it != dc.end(); ++it) { cout<<*it<<" "; } cout<<endl; cout<<"Banned rows: "<<endl; for(it = dr.begin(); it != dr.end(); ++it) { cout<<*it<<" "; } cout<<endl; */ /* for(int i = 0; i < v[r].size() - 1; ++i) { if(v[r][i]) { dc.insert(i); for(int j = 0; j < v.size(); ++j) { if(v[j][i]) dr.insert(j); } } } */ VVI nv; for(int i = 0; i < v.size(); ++i) { if(dr.count(i)) continue; nv.resize(nv.size() + 1); for(int j = 0; j < v[i].size(); ++j) { if(!dc.count(j)) { nv.back().push_back(v[i][j]); } } } /* print(v); cout<<"Removing row "<<r<<endl; print(nv); */ int sel = 0; for(int i = 0; i < v[r].size() - 1; ++i) { if(v[r][i]) ++sel; } selected += sel; sol.push_back(v[r].back()); exact(nv); sol.pop_back(); selected -= sel; } } }
int main() { //omp_set_num_threads(4); cout << "Scanning Started..." << endl; scanf("%d %d %d %d %d",&n,&m,&s,&D,&t); rootN = 0; while(rootN*rootN<n) rootN++; tmp.clear(); tmp.resize(n); for(int i=0; i<m; i++) { int u,v; scanf("%d %d",&u,&v); u--; v--; G[u].PB(v); tmp[u].PB(v); } for(int i=0; i<s; i++) { int x; scanf("%d",&x); x--; S.PB(x); } cout << "Scanning done" << endl; //test_recursive(); double start = omp_get_wtime(); VVI ans; if(D <= t && D <= rootN) { cout << "Case 1 : D <= t and D <= root" << endl; B2::solve(G,n,m,s,D,S,ans); } else if(t >= rootN) { cout << "Case 2 : t >= sqrt(N)" << endl; R1::solve(n,m,s,D,S,G,ans,rootN); } else if(s >= ceil(n/t)) { cout << "Case 3 : s >= ceil(n / t)" << endl; R2::solve(n,m,s,D,S,G,ans,ceil(n/t)); } else if(D <= t*t) { cout << "Case 4 : D <= t*t" << endl; R3::solve(n,m,s,D,S,G,ans,ceil(n/t)); } else { cout << "Case 5 : Else" << endl; R3::solve(n,m,s,D,S,G,ans,ceil(n/t),1,ceil(n/(t*t))); } double end = omp_get_wtime(); printf("N = %d, E = %d, S = %d, D = %d\n",n,m,s,D); if(n <= brute_max) { cout << "Starting Bruteforce..." << endl; VVI dist(n,VI(n,0)); for(int i=0; i<n; i++) { dist[i][i] = 1; for(auto v:tmp[i]) dist[i][v] = 1; } //print(dist); double start_brute = get_cpu_time(); int brute_cnt = transitive_closure(dist,n); double end_brute = get_cpu_time(); int cnt = 0; for(int i=0; i<SZ(S); i++) cnt += SZ(ans[S[i]]); double acc = (cnt*1.0)/brute_cnt; acc *= 100; printf("\nAccuracy: %lf\n",acc); printf("Brute Time: %lf\n",end_brute - start_brute); //print(dist); /* for(int i=0; i<n; i++) for(auto v:ans[i]) assert(dist[i][v]==1); */ cout << "Bruteforce done" << endl; } printf("Time: %lf\n",end-start); //printf("Graph:\n"); //print(tmp); //printf("Transitive Closure:\n"); //print(ans); return 0; }