首页 > 其他分享 >POI2008MAF-Mafia

POI2008MAF-Mafia

时间:2024-04-15 19:46:46浏览次数:19  
标签:cnt vis int POI2008MAF len ++ Mafia deg

POI #基环树 #贪心 #Year2008

一定是若干棵基环内向树,以下仅考虑一棵的情况

最小值直接从下往上选,然后环上的为环的 \(siz\) 的一半

最大值为 \(n\) 减去叶子个数,再特判环上剩下一个的情况

// Author: xiaruize
const int N = 1e6 + 10;

int n;
int a[N];
int deg[N];
int cnt = 0, res = 0;
queue<int> q;
bool fl[N];
bool vis[N];

void solve()
{
	cin >> n;
	rep(i, 1, n)
	{
		cin >> a[i];
		deg[a[i]]++;
	}
	queue<int> q;
	rep(i, 1, n)
	{
		if (!deg[i])
		{
			q.push(i);
			cnt++;
			res++;
		}
	}
	while (!q.empty())
	{
		int x = q.front();
		q.pop();
		if (vis[a[x]])
			continue;
		vis[a[x]] = true;
		deg[a[a[x]]]--;
		fl[a[a[x]]] = true;
		if (!deg[a[a[x]]])
		{
			q.push(a[a[x]]);
			cnt++;
		}
	}
	rep(i, 1, n)
	{
		if (deg[i] && !vis[i])
		{
			int x = i;
			bool f = false;
			int len = 0;
			do
			{
				f |= fl[x];
				len++;
				vis[x] = true;
				x = a[x];
			} while (x != i);
			if (!f && len > 1)
				res++;
			cnt += len / 2;
		}
	}
	cout << n - cnt << ' ' << n - res << endl;
}

#ifndef ONLINE_JUDGE
bool end_of_memory_use;
#endif

signed main()
{
	// freopen(".in","r",stdin);
	// freopen(".out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int testcase = 1;
	// cin >> testcase;
	while (testcase--)
		solve();
#ifndef ONLINE_JUDGE
	cerr << "Memory use:" << (&end_of_memory_use - &start_of_memory_use) / 1024.0 / 1024.0 << "MiB" << endl;
	cerr << "Time use:" << (double)clock() / CLOCKS_PER_SEC * 1000.0 << "ms" << endl;
#endif
	return 0;
}

标签:cnt,vis,int,POI2008MAF,len,++,Mafia,deg
From: https://www.cnblogs.com/xiaruize/p/18136779

相关文章

  • xss.pwnfunction-Mafia
     这个是利用的构造函数用source来获取构造函数的源码并转化成小写Function(/ALERT(1337)/.source.toLowerCase())()或parseInt(string,radix)string:要被解析的字符串。radix:解析时使用的基数(进制)。可选参数,默认为10。用parseint将alert转成进制这里为什么用30因为在......
  • CF348A Mafia 题解
    由于题目具有十分明显的单调性(若\(x\)局能满足要求,则\(>x\)局一定能满足;若\(x\)局无法满足要求,则\(<x\)局也无法满足),因此我们考虑进行二分答案。二分所需要的局数\(x\),设所有人想玩的总局数为\(S\),由题意可得\(S=\sum^{n}_{i=1}a_i\)。因为每局都会有\(1\)人主持,\(n......
  • MAFIA:2-devoflow(mafia-sdn/p4demos/demos/2-devoflow)
    2.1-DevoFlowcounterswiththreshold-basednotification(Counters,Samples,Tags)阈值通过流表的参数的形式传到数据平面,存储在自定义的元数据当中。2.2-DevoFl......
  • MAFIA:1.1 - OpenFlow statistics (Counters, Timestamps)(mafia-sdn/p4demos/demos/1-o
    1.1-OpenFlowstatistics(Counters,Timestamps)解决的核心问题:如何统计一个流的持续时间如何实现一个操作只在数据包第一次出现的时候执行一次,之后再也不执行:设置默......
  • Codeforces Round #202 (Div. 1) A. Mafia 推公式 + 二分答案
    ​​http://codeforces.com/problemset/problem/348/A​​A.MafiatimelimitpertestmemorylimitpertestinputoutputOnedaynfriendsgatheredtogethertoplay"Ma......
  • 2019-2020 ACM-ICPC Brazil Subregional Programming Contest D Denouncing Mafia
    DenouncingMafia贪心+线段树+\(dfs\)序考虑贪心地每次拿能染色最多的点,每拿走一个点,都会影响其他点的值,如果一个点被染色,则他子树的所有点的贡献值都会-1,因此考......