zoukankan      html  css  js  c++  java
  • 【JZOJ 6551】 Cereal

    题目大意:

    (n) 头牛,每头牛喜欢两款麦片,每款麦片只有一份。编号小的牛先选,每头牛先选它最爱的麦片,若没有则选择第二喜欢的,还没有就不吃了。最后问有多少头牛有麦片。

    正文:

    题目并没有强制在线,虽然可以在线进行操作但是会很麻烦,所以这里考虑从题目中的“移除奶牛”变为“加入奶牛”(即倒着算)。

    倒着枚举每头奶牛,如果喜欢的麦片没有被拿走,就直接拿走麦片,否则如果拿走那个麦片的牛的编号要比这头牛的编号要大的话就抢走那个麦片,让原先麦片主去那它第二喜欢的麦片。

    代码:

    void dfs(int n, int m)
    {
    	if(!vis[m])
    	{
    		vis[m] = n;
    		Ans++;
    	}else
    	{
    		if(vis[m] > n)
    		{
    			int y = vis[m];
    			vis[m] = n;
    			if(a[y] == m) dfs(y, b[y]);
    		}	
    	}
    }
    
    int main()
    {
    	scanf("%d%d", &n, &m);
    	for (int i = 1; i <= n; ++i)
    		scanf ("%d%d", &a[i], &b[i]);
    	for (int i = n; i >= 1; --i)
    	{
    		dfs(i, a[i]);
    		ans[i - 1] = Ans;
    	}
    	for (int i = 0; i < n; ++i)
    		printf("%d
    ", ans[i]);
        return 0;
    }
    
  • 相关阅读:
    字符串 高精度计算
    JAVA Socket编程 课堂作业
    图论 Floyd算法
    天梯赛题解 L1-049 天梯赛座位分配
    天梯赛题解 -L1-039 古风排版
    HDU 5558 后缀数组
    HDU 6194 后缀数组
    HDU 5769 后缀数组
    HDU 4691 后缀数组+RMQ
    HDU 4135 容斥原理
  • 原文地址:https://www.cnblogs.com/GJY-JURUO/p/12688544.html
Copyright © 2011-2022 走看看