题目链接:点击查看

题目大意:Lee的厨房中有 n 道菜,每道菜的数量为 w[ i ] ,现在 Lee 会邀请 m 个朋友,每个朋友都有最爱吃的两道菜 x[ i ] 和 y[ i ] ,当朋友 i 来到 Lee 家后,会选择吃掉 x[ i ] 和 y[ i ] 各一份,如果 x[ i ] 没有了的话,那么他只会选择吃掉一份 y[ i ] ,如果 y[ i ] 没有了的话同理,但是如果 x[ i ] 和 y[ i ] 同时没有的话,这个朋友就会吃掉 Lee,问 Lee 能否安排一个合适的顺序以保证存活,输出这个顺序

题目分析:读完题后,需要发现的一个重要信息是,设 sum[ i ] 为每道菜的需求量,那么如果 sum[ i ] <= w[ i ] 的话,那么这 sum[ i ] 个人是一定可以吃到菜的,我们只需要将其安排在最后来吃就好了,同理,如果所有的 sum[ i ] > w[ i ] 成立的话,那么将会是无解的,因为假设 min_w 为所有 w[ i ] 中的最小值,那么至少会有 min_w 个人需要吃两个菜,换句话说我们无论安排谁最后来,都是需要吃两个菜的,这与我们的贪心策略不符

分析完后,实现的话用拓扑的思想就好了,只不过将拓扑中 du[ i ] == 0 的条件换成了 sum[ i ] <= w[ i ] 而已

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=2e5+100;int w[N],sum[N],n,m;vector<pair<int,int>>node[N];stack<int>ans;bool vis[N];bool topo()
{queue<int>q;for(int i=1;i<=n;i++)if(sum[i]<=w[i])q.push(i);while(q.size()){int u=q.front();q.pop();for(auto it:node[u]){int v=it.first,id=it.second;if(vis[id])continue;vis[id]=true;ans.push(id);if(--sum[v]<=w[v])q.push(v);}}return ans.size()==m;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",w+i);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);node[x].emplace_back(y,i);node[y].emplace_back(x,i);sum[x]++,sum[y]++;}if(topo()){puts("ALIVE");while(ans.size()){printf("%d ",ans.top());ans.pop();}}elseputs("DEAD");return 0;
}

CodeForces - 1369E DeadLee(贪心+拓扑)相关推荐

  1. Codeforces1600数学day5[找规律CodeForces - 1059C,贪心数学A - Banh-mi CodeForces - 1062C ]

    A - Banh-mi CodeForces - 1062C 题目大意:就是开始给你一个01序列,和q次询问,每次询问会给你一个区间,每次你会从这个区间内拿出一个数,在区间内的其他未被拿走的数字会加上 ...

  2. CodeForces - 1494D Dogeforces(贪心+构造)

    题目链接:点击查看 题目大意:给出 nnn 个叶子结点和一个 n∗nn*nn∗n 的 LCALCALCA 矩阵,其中 LCALCALCA 表示的是最近公共祖先节点的权值,现在需要构造出一棵自顶向下权值 ...

  3. Codeforces 1203E Boxers(贪心)

    题目链接:https://codeforces.com/problemset/problem/1203/E 题意:给定n个数字,每个数字可以进行一次+1或是-1的变换(也可以不变),问通过对部分数字适 ...

  4. codeforces数学1600day4[贪心数学公式推导CodeForces - 1151D ,思维CodeForces - 1085C,数论同余+组合计数 CodeForces - 1056B]

    A - Stas and the Queue at the Buffet CodeForces - 1151D 题目大意:就是给你n个人在排队,每个人都有一个ai值和bi值,每个人的不满意度就是f(i ...

  5. Codeforces 1093C (思维+贪心)

    题面 传送门 题目大意: 有一个长n(n为偶数)的序列a 已知a满足 \(a_1≤a_2≤⋯≤a_n\) 给出一个长度为\(\frac{n}{2}\) 的序列b,定义\(b_i=a_i+a_{n-i+ ...

  6. codeforces#236_div2_A nuts 贪心

    题目地址:cf#236_div2_A 题目大意: 给你四个数 k,a,b,v;      k代表每个隔间最多不能超过的数目  ,a是果子个数,b是有多少隔板数量,v是一个隔板最多能装多少 现在问你,要 ...

  7. CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)

    题目链接:点击查看 题目大意:给出 nnn 个点,任意两个点之间的边权为 ai⊕aja_i\oplus a_jai​⊕aj​,求最小生成树 题目分析:去年多校写过一样的模型,再拿出来写一遍回顾一下:牛 ...

  8. CodeForces - 1252E Songwriter(贪心)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列 a ,现在需要构造出一个长度为 n 的序列 b ,满足相邻的 i 和 i + 1 下,a[ i ] 和 a[ i + 1 ] 的大小关系应该和 ...

  9. CodeForces - 1368E Ski Accidents(拓扑排序)

    题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的有向无环图,规定:每个点的出度一定小于等于 2 ,现在要求删除掉至多  个点,使得任意一条路径的长度都不大于 1 题目分析:主要是这个 ...

最新文章

  1. java SE环境变量配置
  2. Spring Boot 集成 RabbitMq 实战操作(二)
  3. 2021年北京高校数学建模校际联赛题目 出版社图书印制策略
  4. ssh根据姓名查询的时候报错java.lang.IndexOutOfBoundsException: Remember that
  5. 数组名和取数组名的区别
  6. 130701基础练习-first
  7. 中国约量子计算机啥水平,中国科学家捕获马约拉纳费米子 或敲开量子计算机世界大门...
  8. linux c 多线程终止耗时长的任务,Linux C:从main()返回是否导致多线程应用程序终止?...
  9. java卡 应用_一种实现多发行方的多应用Java卡的方法与流程
  10. Leetcode每日一题:183.customers-who-never-order(从不订购的客户)
  11. “编程能力差,90% 输在了数学上!”CTO:多数程序员都是瞎努力!
  12. asp.net core部署到iis
  13. c语言中函数的递归调用,用C语言函数调用与递归解决问题
  14. MSDP RPF检测
  15. 高科技口罩可以5分钟内灭活新冠病毒;华伦天奴美妆全线产品将登陆中国市场 | 美通企业日报...
  16. ubuntu华硕Z87-plus主板网卡驱动
  17. 蚂蚁上市招股书:员工持股40%月薪人均5万,直奔财富自由
  18. 消息中间件之rabbitMQ实战-死信队列
  19. 估计标准误差syx_相关系数与估计标准误差的关系
  20. canvas中getContext(“2d“) 对象的属性和方法

热门文章

  1. Feign-自定义配置
  2. Nginx服务的命令行控制
  3. 一条更新SQL 是如何执行的?
  4. 搭建项目前端页面环境
  5. 文件上传案例优化(文件命名循环接收多线程提高效率)
  6. 什么是XSS攻击XSS攻击应用场景
  7. SpringBoot高级-任务-异步任务
  8. redis(19)--事务
  9. linux 查看磁盘空间 拷贝不同目录下的文件
  10. 编码(2)从字节理解Unicode(UTF8/UTF16)