题意:

派会上有n种食物,每种食物有wi份。有m个朋友,每一个朋友有两种他喜欢吃的食物xi,yi。你需要判断他的朋友是否都能吃到食物。如果都能吃到食物,那么要输出朋友来的顺序,不能的话输出“DEAD”。

如果一个朋友来的时候发现两种他喜欢的食物都有,那么他会两种食物都吃一份,如果仅有一种食物还有,那么就只吃一份这种食物。

题解:

首先先预处理一下每一种食物有多少人要吃,我们设某种食物的需求量为needi份,如果某种食物的needi<=wi,那么只要喜欢第i种食物的人永远不可能没有食物吃。那么我们可以使用贪心策略,既然这些人什么时候都有吃的东西,那么我们就最后再通知他来派会,同时这些人对其他食物的需求我们可以消除掉,因为另一种食物有没有都不重要了。就一直这样判断看最后还有没有人没有加入到通知到派会,如果没有的话就输出“ALIVE”并输出序列

其次就是这道题的数据较大,所以暴力方法就不可行,我们就可以采用建图方式来解决问题,具体方法见代码

代码:

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string>
5 #include<queue>
6 #include<string.h>
7 #include<map>
8 #include <iostream>
9 #include <math.h>
10 using namespace std;
11 typedef long long ll;
12 #define maxn 300005
13 #include<vector>
14 struct node
15 {
16 int id,x;
17 };
18 vector<node>e[maxn];
19 queue<int>q;
20 int d[maxn],w[maxn],ans[maxn],vis[maxn];
21 int main()
22 {
23 int n,m;
24 scanf("%d %d",&n,&m);
25 for(int i=1;i<=n;i++)
26 scanf("%d",&w[i]);
27 for(int i=1;i<=m;i++)
28 {
29 int x,y;
30 scanf("%d %d",&x,&y);
31 e[x].push_back({i,y});
32 e[y].push_back({i,x});
33 d[x]++;d[y]++;
34 }
35 for(int i=1;i<=n;i++)
36 {
37 if(d[i]<=w[i])
38 {
39 q.push(i);
40 }
41 }
42 int f=m;
43 while(!q.empty())
44 {
45 int i=q.front();
46 q.pop();
47 //printf("i=%d\n",i);
48 for(int k=0;k<e[i].size();++k)
49 {
50 node j=e[i][k];
51 if(vis[j.id]==1)
52 continue;
53 vis[j.id]=1;
54 d[j.x]--;
55 //printf("j.id=%d j.x=%d\n",j.id,j.x);
56 if(d[j.x]<=w[j.x]) q.push(j.x);
57 ans[f--]=j.id;
58
59 }
60 }
61 if(f)
62 {
63 printf("DEAD\n");
64 return 0;
65 }
66 printf("ALIVE\n");
67 for(int i=1;i<=m;i++)
68 {
69 printf("%d",ans[i]);
70 printf("%c",i==n?'\n':' ');
71 }
72 }

Codeforces Round #652 (Div. 2) E. DeadLee 贪心的更多相关文章

  1. Codeforces Round #652 (Div. 2) E. DeadLee(贪心)

    题目链接:https://codeforces.com/contest/1369/problem/E 题意 Lee 有 $n$ 种不同种类的食物和 $m$ 个朋友,每种食物有 $w_i$ 个,每个朋友 ...

  2. Codeforces Round #652 (Div. 2) C. RationalLee 贪心

    题意: t组输入,你有n个数,还有k个朋友,每一个朋友需要wi个数.意思就是你要给第i个朋友分配wi个数,输入保证w1+w2+...+wk=n 一个朋友的兴奋值是你分配给他的数中最大值加上最小值的和( ...

  3. Codeforces Round #652 (Div. 2) C. RationalLee(贪心)

    题目链接:https://codeforces.com/contest/1369/problem/C 题意 将 $n$ 个数分给 $k$ 个人,每个人分 $w_i$ 个数($\sum_{i = 1}^ ...

  4. Codeforces Round #202 (Div. 1) A. Mafia 贪心

    A. Mafia Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/348/problem/A D ...

  5. Codeforces Round #382 (Div. 2)B. Urbanization 贪心

    B. Urbanization 题目链接 http://codeforces.com/contest/735/problem/B 题面 Local authorities have heard a l ...

  6. Codeforces Round #164 (Div. 2) E. Playlist 贪心+概率dp

    题目链接: http://codeforces.com/problemset/problem/268/E E. Playlist time limit per test 1 secondmemory ...

  7. Codeforces Round #180 (Div. 2) B. Sail 贪心

    B. Sail 题目连接: http://www.codeforces.com/contest/298/problem/B Description The polar bears are going ...

  8. Codeforces Round #192 (Div. 1) A. Purification 贪心

    A. Purification Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/329/probl ...

  9. Codeforces Round #274 (Div. 1) A. Exams 贪心

    A. Exams Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/480/problem/A Des ...

随机推荐

  1. windows打包脚本出现 /bin/sh^M: 坏的解释器: 没有那个文件或目录 错误

    1.错误描述 我在Windows 10 系统下打包dolphinscheduler,上传到centos7解压之后,执行脚本报如下错误: -bash: ./dolphinscheduler-daemon ...

  2. MySQL的索引优化分析(二)

    一.索引优化 1,单表索引优化 建表 CREATE TABLE IF NOT EXISTS article( id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO ...

  3. 【Linux】dlopen failed: /lib/lsiRAID.so: cannot open shared object file: No such file or directory

    遇到这个问题,首先第一反应,是看其他的服务器中是否有这个库文件,如果有的话直接cp过来一份就行 但是检查发现,其他的系统中也不存在lsiRAID.so这个库文件,很神奇.. 但是看日志持续报错,查看s ...

  4. Nacos使用和注册部分源码介绍

    Nacos简单介绍 Nacos致力于帮助您发现.配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理.Nacos帮助您更敏捷和容易地构建. ...

  5. merge join pg伪代码

    Join { get initial outer and inner tuples INITIALIZE do forever { while (outer != inner) { SKIP_TEST ...

  6. 命令模式与go-redis command设计

    目录 一.什么是命令(Command)模式 二.go-redis command相关代码 三.总结 一.什么是命令(Command)模式 命令模式是行为型设计模式的一种,其目的是将一个请求封装为一个对 ...

  7. ubuntu20.04并添加桌面快捷方式,以安装火狐可浏览器开发版(水狐)为例

    @参考原文 1. 下载linux版源文件 从火狐官网下载linux版的水狐源文件压缩包,@火狐浏览器开发版(水狐)下载地址. 2. 解压下载源文件 将下载的"tar.bz2"文件解 ...

  8. 安装JDK与卸载JDK教程

    卸载JDK 删除JDK的安装目录,也就是删除了主程序(通过环境变量可以找到) 删除java_home的环境变量 删除环境变量path中与java_home相关的 通过DOS命令cmd来检验是否卸载成功 ...

  9. status 404 reading EduClient#getCourseInfoOrder(String)解决过程

    UcenterClient#getUserInfoOrder(String) failed and no fallback available.解决过程 报错内容: com.netflix.hystr ...

  10. 设置一个两边固定中间自适应的css

    1.两边浮动,中间自动宽度 给左右两个盒子设置左右浮动,中间的盒子不设置宽度,左右两边边距为左右盒子的宽度,中间盒子的位置必须写在右盒子下面,不然会把右盒子挤下去 如:   <div class ...