コード例 #1
0
ファイル: 1439.cpp プロジェクト: Nanoth/acm-icpc
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;
}
コード例 #3
0
ファイル: 1439.cpp プロジェクト: Nanoth/acm-icpc
void add(int id, int o)
{
	if(!a[id][0])
	{
		cnt[1] += o;
		return;
	}
	tmp = 1;
	pfs(id, o, 0, 0);
}
コード例 #4
0
ファイル: ford_fulkerson.cpp プロジェクト: leochatain/inf5016
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;
}
コード例 #5
0
ファイル: convert2tlv.cpp プロジェクト: CroW-CZ/opentoonz
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;
}