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:

2 0 1

输入2:

5 4 2
1 2
2 5
4 3
3 1

输入3:

4 3 2
1 2
2 3
1 2

输入4:

5 11 7
1 3
4 2
1 5
4 2
2 5
1 3
4 1
2 3
4 1
5 1
1 5

Sample Output

输出1:

1

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

输出2:

1

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

输出3:

2

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

输出4:

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分。

#include<cstdio>
#include<queue>
#pragma GCC optimize(2)
#define ll long long
using namespace std; int n,m,k;
ll cnt;
ll a[100001];
priority_queue<ll,vector<ll>,greater<ll> > que; inline int read()
{
int x=0; char c=getchar();
while (c<'0' || c>'9') c=getchar();
while (c>='0' && c<='9')
{
x=(x<<1)+(x<<3)+(c^48);
c=getchar();
}
return x;
} int main()
{
freopen("A.in","r",stdin);
n=read();m=read();k=read();
for(int i=1,x,y;i<=m;i++)
{
x=read();y=read();
a[x]++;a[y]++;
}
for(int i=1;i<=n;i++)
que.push(a[i]);
while(!que.empty())
{
a[1]=que.top();que.pop();
if(a[1]>=k) break;
a[2]=que.top();que.pop();
a[1]++;a[2]++;
cnt++;
que.push(a[1]);
que.push(a[2]);
}
printf("%lld",cnt);
fclose(stdin);
return 0;
}
  • 【正解】

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

复杂度就是读入复杂度。

#include<cstdio>
#include<cmath>
#include<algorithm>
#pragma GCC optimize(2)
#define ll long long
using namespace std; int n,m,k;
ll cnt,maxn;
ll a[100001]; int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
a[x]++;a[y]++;
}
for(int i=1;i<=n;i++)
{
if(k<a[i]) continue;
a[i]=k-a[i];
maxn=max(maxn,a[i]);
cnt+=a[i];
}
if(ceil(cnt/2.0)<maxn)
{
printf("%lld",maxn);
return 0;
}
printf("%lld",(cnt+1)/2);
return 0;
}

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. nginx 和 tp兼容pathinfo和rewrite两种url访问方式

    环境:centos7,yum安装的nginx1.10.php-fpm,tp3.2 本方法只需要配置nginx.conf的一个文件就可以支持pathinfo和rewrite两种url访问方式 vim / ...

  2. pip使用国内源

    对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...

  3. jmeter csv 参数化

    from:https://blog.csdn.net/bafasanqianzhang/article/details/77480297 [注意:csv可以上传txt,csv,另外参数必须正确否则会报 ...

  4. 剑指Offer-和为S的连续正数序列

    题目: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就 ...

  5. cmd非运行完再保存,结果显示&保存同时进行

    #coding:utf-8 """ fps信息获取到文件 """ import sys import subprocess class Lo ...

  6. .NET SQLServer数据库转MySql

    第一步:找到下图两个组件,卸载. 第二步:NuGet下载下图组件. 第三步:在连接数据库OnConfiguring方法处,做如下修改: protected override void OnConfig ...

  7. Python之AJAX

    AJAX <script> $("#i4").on("click", function () { var i1 = $("#i1" ...

  8. 解决libVLC无法响应鼠标消息

    参考: https://blog.jianchihu.net/player-based-on-libvlc.html 自己在Qt上的实现: 头文件 libvlc_instance_t * m_inst ...

  9. vue-calendar 基于 vue 2.0 开发的轻量,高性能日历组件

    vue-calendar-component 基于 vue 2.0 开发的轻量,高性能日历组件 占用内存小,性能好,样式好看,可扩展性强 原生 js 开发,没引入第三方库 Why Github 上很多 ...

  10. python输入整数

    #!/usr/bin/env python#ecoding=utf-8'''Created on 2017年11月2日 @author: James zhan''' def fun(n): if n= ...