1月28日

Description

帝国时代3是一款十分刺激的RTS游戏。你需要控制自己的一块殖民地,发展殖民地的经济和军事,最终打败其他殖民地。小L是这个游戏的狂热爱好者。一次小L打算打AI试试身手。

小L发展了几分钟,自己的殖民地人口便突破了30,然而小L发现大事不好了:

小L还处在不能建造军事单位的“发现时代”,然而敌人早已经到了“殖民时代”,发展起了一支雄厚的殖民地军,小L的殖民地受攻击了却没有一个正规的军事单位用来防御!不要认为这是小L 的技术问题,实际上AI还停留在以jg斗争为纲的落后理念上,而小L 早就以经济为第一要务了。

小L在之前已经在自己殖民地的外部,拉起了许多围墙。

帝国时代3里的围墙如图所示。

图的地址太长了不引用了

每一道围墙,总是连接着两个围墙连接处 (以下简称“连接处”)。

图的地址太长了不引用了

现在小L有n个连接处,m道围墙。

小L虽然没兵,但是他的智商比AI不知道高到那里去了,因此,只要每个连接处至少连接着k道围墙,小L就一定能顶住这波攻击。

小L可以任意加围墙,每道围墙可以连接两个已有的连接处。

连接处是不能连接自己的,但是这里有一些规则与原帝国时代3的设定不同,两个连接处之间可以连接多个围墙,连接处初始时可能不连任何围墙,围墙之间也可以相交。

小L想知道,自己至少要多加多少道围墙}才能满足每个连接处至少连接着k道围墙?

Input

第一行三个整数n, m, k,表示连接处个数、围墙个数以及每个连接处至少要连接的围墙个数,连接处被编号为1到n}。

接下来m行,每行两个正整数x, y,表示这个围墙连接编号为x的连接处和编号为y的连接处。

Output

输出一行一个整数,表示至少要加的围墙的条数。

Sample Input

输入1:

  1. 2 0 1

输入2:

  1. 5 4 2
  2. 1 2
  3. 2 5
  4. 4 3
  5. 3 1

输入3:

  1. 4 3 2
  2. 1 2
  3. 2 3
  4. 1 2

输入4:

  1. 5 11 7
  2. 1 3
  3. 4 2
  4. 1 5
  5. 4 2
  6. 2 5
  7. 1 3
  8. 4 1
  9. 2 3
  10. 4 1
  11. 5 1
  12. 1 5

Sample Output

输出1:

  1. 1

样例1解释:初始时有两个连接处,题目中要求至少每个连接处要连1个围墙,我们加一个围墙连接这两个连接处即可。

输出2:

  1. 1

样例2解释:连接编号为5的和编号为4的连接处即可。

输出3:

  1. 2

样例3解释:编号为4的连接处没有连接任何围墙,编号为3的连接处还需要一条。连接编号为4的和编号为3的连接处之后,编号为4的连接处与另外三个连接处中任意一个连一个围墙即可,注意连接处是不能自己和自己连接的。

输出4:

  1. 7

Data Constraint

对于60%的数据,n × ans ≤ 10000000,ans表示最终的答案。

对于前100%的数据,n, m, k ≤ 100000,n ≥ 2, m, k ≥ 0, x ≠ y, 1 ≤ x, y ≤ n。

Solution

  • 【我的解法】

看完了题后愣了几秒,然后打了个小根堆。。。本来是只有60分的,但是出题人过于友善,只卡了我一个点,拿了90分。

  1. #include<cstdio>
  2. #include<queue>
  3. #pragma GCC optimize(2)
  4. #define ll long long
  5. using namespace std;
  6. int n,m,k;
  7. ll cnt;
  8. ll a[100001];
  9. priority_queue<ll,vector<ll>,greater<ll> > que;
  10. inline int read()
  11. {
  12. int x=0; char c=getchar();
  13. while (c<'0' || c>'9') c=getchar();
  14. while (c>='0' && c<='9')
  15. {
  16. x=(x<<1)+(x<<3)+(c^48);
  17. c=getchar();
  18. }
  19. return x;
  20. }
  21. int main()
  22. {
  23. freopen("A.in","r",stdin);
  24. n=read();m=read();k=read();
  25. for(int i=1,x,y;i<=m;i++)
  26. {
  27. x=read();y=read();
  28. a[x]++;a[y]++;
  29. }
  30. for(int i=1;i<=n;i++)
  31. que.push(a[i]);
  32. while(!que.empty())
  33. {
  34. a[1]=que.top();que.pop();
  35. if(a[1]>=k) break;
  36. a[2]=que.top();que.pop();
  37. a[1]++;a[2]++;
  38. cnt++;
  39. que.push(a[1]);
  40. que.push(a[2]);
  41. }
  42. printf("%lld",cnt);
  43. fclose(stdin);
  44. return 0;
  45. }
  • 【正解】

直接统计出每个点还需要多少个度数,如果需要度数最多的点大于其他度数的总和,那么答案就是这个点的度数。否则就是所有点需要的度数的总和除以二向上取整。

复杂度就是读入复杂度。

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<algorithm>
  4. #pragma GCC optimize(2)
  5. #define ll long long
  6. using namespace std;
  7. int n,m,k;
  8. ll cnt,maxn;
  9. ll a[100001];
  10. int main()
  11. {
  12. scanf("%d%d%d",&n,&m,&k);
  13. for(int i=1,x,y;i<=m;i++)
  14. {
  15. scanf("%d%d",&x,&y);
  16. a[x]++;a[y]++;
  17. }
  18. for(int i=1;i<=n;i++)
  19. {
  20. if(k<a[i]) continue;
  21. a[i]=k-a[i];
  22. maxn=max(maxn,a[i]);
  23. cnt+=a[i];
  24. }
  25. if(ceil(cnt/2.0)<maxn)
  26. {
  27. printf("%lld",maxn);
  28. return 0;
  29. }
  30. printf("%lld",(cnt+1)/2);
  31. return 0;
  32. }

A The Empire Age的更多相关文章

  1. 根据对象的某一属性进行排序的js代码(如:name,age)

    var data = [{ name: "jiang", age: 22 }, { name: "AAAAAAAAAAAAAA", age: 21 }, { n ...

  2. 关于一道数据库例题的解析。为什么σ age>22 (πS_ID,SCORE (SC) ) 选项是错的?

    本人大二学子.近段时间在做数据库复习题的时候遇到一道题,如下. 有关系SC(S_ID,C_ID,AGE,SCORE),查找年龄大于22岁的学生的学号和分数,正确的关系代数表达式是( ) . ⅰ. πS ...

  3. Java-集合-第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum 表示学生的班号,例如“class05”。 有如下List List list = new ArrayList(); l

    第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; ...

  4. 第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum 表示学生的班号,例如“class05”。 有如下List List list = new ArrayList();

    list.add(new Student("Tom", 18, 100, "class05")); list.add(new Student("Jer ...

  5. 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud

    package zuoye; public class student { int age; String name; int stuNO; void outPut() { System.out.pr ...

  6. Empire C:Basic 3

    首先我们定义一个表示年龄的指针: int* page: 这就是定义了一个指针,和定义普通变量就多了一个*符号而已. 为什么变量名用了p开头,这里引用了英文pointer(指向),表示它是一个指针,而非 ...

  7. LINQ TO ENTITY 根据Birthday获取Age

    from emp in EmployeeInfo let years = EntityFunctions.DiffYears(emp.Birthday.Value,DateTime.Now) let ...

  8. 【UVA 11462】 Age Sort(基数排序)

    题 题意 给你最多2000000个数据,大小是1到99的数,让你排序输出. 分析 快排也可以过.不过这题本意是要基数排序(桶排序),就是读入年龄age, a[age]++,然后输出时,从1到99岁(看 ...

  9. Why The Golden Age Of Machine Learning is Just Beginning

    Why The Golden Age Of Machine Learning is Just Beginning Even though the buzz around neural networks ...

随机推荐

  1. dedecmsV5.7织梦后台更新文章,发布时间不自动更新

    问题:dedecmsV5.7后台修改文章的时候,会更新发布时间,需求是不自动更新时间,还是当时的发布时间 解决: 1.修改后台文件夹/templets/archives_edit.htm,articl ...

  2. Vant-Weapp小程序+商城案例

    功能还在进一步完善中,欢迎扫一扫提出宝贵意见! 详细信息可进群沟通:

  3. Java使用RSA加密解密签名及校验

    RSA加密解密类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...

  4. rem 转 px

    (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...

  5. 【Angular 5】数据绑定、事件绑定和双向绑定

    本文为Angular5的学习笔记,IDE使用Visual Studio Code,内容是关于数据绑定,包括Property Binding.Class Binding.Style Binding. 在 ...

  6. GuavaCache本地缓存学习总结

    https://my.oschina.net/u/2270476/blog/1805749 http://www.cnblogs.com/parryyang/p/5777019.html https: ...

  7. c# Process cmd 执行完回调 Proc_OutputDataReceived mysql mysqldump mysql source备份还原数据

    c# Process 执行完回调 Proc_OutputDataReceived mysql mysqldump mysql source备份还原数据 直接贴代码 前提:mysql5.7 vs2017 ...

  8. echarts x和y去掉

    解决方法 "axisLine": { "show": false },

  9. week8

    ---恢复内容开始--- week8 1.动态导入模块 2.断言 3.ftp 4.socketserver 1.动态导入模块 import importlib a = importlib.import ...

  10. docker 下安装gitlab

    1.找到docker镜像 docker search gitlab 2.下载gitlab镜像 docker pull  gitlab/gitlab-ce/ 3.通常会将 GitLab 的配置 (etc ...