int main() { int casos, n, m, a, b, c, i, j, caso; scanf("%d", &casos); for (caso = 1; caso <= casos; caso++) { scanf("%d %d", &n, &m); /* preencher com 0 a matriz de adj sempre */ for (i = 0; i < n; i++) for (j = 0; j < n; j++) g[i][j] = 0; for (i = 0; i < m; i++) { scanf("%d %d %d", &a, &b, &c); a--; b--; g[a][b] = g[b][a] = c; } printf("%d\n", minCut(n)); } return 0; }
int minCut(string s) { int res = INT_MAX; int part = 0; if(isPalindrome(s)) { return 0; } minCut(s, res, part); return res; }
double AlmostCliqueRule::computeMinCutValue(WorkingCopyGraph::NodeMap<bool>& candidate) { ConstMap<WorkingCopyGraph::Edge, double> zero(0.0); typedef LessMap<ConstMap<WorkingCopyGraph::Edge, double>, const WorkingCopyGraph::EdgeMap<double> > PositiveWeight; PositiveWeight posWeight(zero, _instance.getWeight()); typedef SubGraph<const WorkingCopyGraph, WorkingCopyGraph::NodeMap<bool>, PositiveWeight> SubGraphPositiveWeight; SubGraphPositiveWeight candidatePosWeight(_instance.getGraph(), candidate, posWeight); HaoOrlin<SubGraphPositiveWeight, WorkingCopyGraph::EdgeMap<double> > minCut(candidatePosWeight, _instance.getWeight()); minCut.init(); minCut.calculateOut(); return minCut.minCutValue(); }
void minCut(string s, int& res, int& part) { if(s.length() == 0) { res = min(res, part-1); } else { for(int i=1; i<=s.length(); i++) { string tmp = s.substr(0, i); if(isPalindrome(tmp)) { part++; minCut(s.substr(i), res, part); part--; } } } }
int minCut(string &s, int start, int cuts, vector<int> &scuts) { int minCuts = INT_MAX; if(start == s.size()) // found one { return cuts; } for(int i = start+1; i <= s.size(); i++) // 依次考虑长度为1,2,3,..的子串是否是回文串 { if(isPalindrome(s, start, i)) // 如果是,就递归的求后面部分的所有回文分割 { int c = 1 + cuts; if (scuts[i] == INT_MAX) { scuts[i] = minCut(s, i, 0, scuts); } c += scuts[i]; minCuts = min(minCuts, c); } } return minCuts; }
void testMinCut(){ string s = "ababababababababababababcbabababababababababababa"; int res = minCut(s); cout << res << endl; }
int minCut(string s) { vector<int> scuts(s.size()+1, INT_MAX); return minCut(s, 0, 0, scuts)-1; }