void pfs(int id, int o, int dep, int sum) { if(dep == a[id][0]) { if(sum > 0) cnt[tmp] += o; return; } pfs(id, o, dep + 1, sum); tmp *= a[id][dep + 1]; pfs(id, o, dep + 1, sum + 1); tmp /= a[id][dep + 1]; }
int Graph::MaxFlow(int ss, int tt) { s = ss, t = tt; memset(flow, 0, sizeof(flow)); maxflow = 0; while(pfs()) augment(s, t); return maxflow; }
void add(int id, int o) { if(!a[id][0]) { cnt[1] += o; return; } tmp = 1; pfs(id, o, 0, 0); }
int FordFulkerson::run(const int src, const int dst) { Graph residual = create_residual_graph(graph_); while(pfs(residual, src, dst)); //pfs(residual, src, dst); // Count forward edges from the source to find out the max flow. int max_flow = 0; for (edge_it i = residual[dst].begin(); i != residual[dst].end(); i++) { max_flow += i->second; } return max_flow; }
TPalette *Convert2Tlv::buildPalette() { std::map<TPixel, int>::const_iterator it = m_colorMap.begin(); TPalette::Page *page = m_palette->getPage(0); QList<int> stylesToBeAddedToPage; for (; it != m_colorMap.end(); ++it) { if (it->second > m_maxPaletteIndex) //colore nuovo da aggiungere alla paletta) { if (m_palette->getStyleCount() > it->second) m_palette->setStyle(it->second, it->first); else { while (m_palette->getStyleCount() < it->second) m_palette->addStyle(TPixel::Transparent); int id = m_palette->addStyle(it->first); assert(id == it->second); } } if (!m_palette->getStylePage(it->second)) stylesToBeAddedToPage.push_back(it->second); } /*- インデックス順にページに格納する -*/ if (!stylesToBeAddedToPage.isEmpty()) { qSort(stylesToBeAddedToPage.begin(), stylesToBeAddedToPage.end()); for (int s = 0; s < stylesToBeAddedToPage.size(); s++) page->addStyle(stylesToBeAddedToPage.at(s)); } /*-- Cleanupデフォルトパレットを追加する --*/ TFilePath palettePath = ToonzFolder::getStudioPaletteFolder() + "cleanup_default.tpl"; TFileStatus pfs(palettePath); if (!pfs.doesExist() || !pfs.isReadable()) return m_palette; TIStream is(palettePath); if (!is) return m_palette; std::string tagName; if (!is.matchTag(tagName) || tagName != "palette") return m_palette; std::string gname; is.getTagParam("name", gname); TPalette *defaultPalette = new TPalette(); defaultPalette->loadData(is); m_palette->setIsCleanupPalette(false); TPalette::Page *dstPage = m_palette->getPage(0); TPalette::Page *srcPage = defaultPalette->getPage(0); for (int srcIndexInPage = 0; srcIndexInPage < srcPage->getStyleCount(); srcIndexInPage++) { int id = srcPage->getStyleId(srcIndexInPage); bool isUsedInDstPalette = false; for (int dstIndexInPage = 0; dstIndexInPage < dstPage->getStyleCount(); dstIndexInPage++) { if (dstPage->getStyleId(dstIndexInPage) == id) { isUsedInDstPalette = true; break; } } if (isUsedInDstPalette) continue; else { int addedId = m_palette->addStyle(srcPage->getStyle(srcIndexInPage)->clone()); dstPage->addStyle(addedId); /*-- StudioPalette由来のDefaultPaletteの場合、GrobalNameを消去する --*/ m_palette->getStyle(addedId)->setGlobalName(L""); m_palette->getStyle(addedId)->setOriginalName(L""); } } delete defaultPalette; /*-- Cleanupデフォルトパレットを追加する ここまで --*/ return m_palette; }