12.10图论(被血虐)

来源:互联网 发布:芈月出装 知乎 编辑:程序博客网 时间:2024/06/18 17:49

昨天进行了图论考试,只拿了18分,很惨痛;

同时也暴露出来了很多问题:

第一,基础代码不够熟练,很多的算法都不会完整的写下来;

解决方法:背代码,刷题目(多刷基础题目的代码);

第二,不够敏感,就像是第2题的超级牛游戏,当时一点也没想到是最小生成树的板子;

直到最后才想到比n-1次比赛,才想到是最大生成树;

解决方法:多去思考一些题目之间的内在关系;

第三,犹豫太长时间,找了所有题目,这题看看有点难,就换下一题,浪费了很多时间。


PROB 1:重量不同的硬币

Fj有N个硬币,编号为1..N。
现在有W个推断,为(A,B),表示硬币A比硬币B重。
寻找并输出一个硬币编号,要求其重量明确不同于其他硬币的个数最多。
如果有多个答案,输出字典序最小的一个。
如果给出的数据有矛盾,输出"IMPOSSIBLE"
INPUT FORMAT:
* Line 1: 两个整数: N and W.
* Lines 2..W+1: 每行两个整数: A, B
OUTPUT FORMAT:
* Line 1: 重量不同于其他硬币的个数最多的硬币编号。
SAMPLE INPUT (file coins.in):
7 6
1 6
1 5
3 6
4 3
2 4
2 5
SAMPLE OUTPUT (file coins.out)
2
OUTPUT DETAILS:
有7个硬币,6个推断对,2的重量不同于3,4,5,6
数据范围

1 <= N <= 1,000  1 <= W <= 3,000

这题用的是正反dfs,分别求出比自己大的和比自己小的,

既然比自己小或比自己大,那么就可以得出明确质量与自己质量不同的硬币数;





【问题描述】

现在有N(1 <= N <= 2000)头奶牛在玩 超级牛 游戏。每头奶牛有一个唯一的ID,ID范围是 1 ... 2 ^ 30-1。

超级牛比赛是淘汰赛 - 每场比赛后,输者退赛,赢者继续留在比赛,直到只剩一队游戏结束。

输赢是FJ自己决定的,或者说结果可以任意决定!

比赛的积分规则十分奇葩:积分=第一队的ID XOR 第二队的ID。 比如,12队和20队打比赛,积分是24,因为01100 XOR 10100 = 11000。

FJ认为,分越高越刺激。所以他想让总积分最高。请帮助FJ设计比赛。

【输入】

第一行包含一个整数N

以下N行包含N个队伍的ID。

【输出】

最高总积分

【输入输出样例1】

 

 

4

3

6

9

10

37


输出详情:实现37的一种方法如下:

3VS 9 ==》9胜,本场积分 3 XOR 9 = 10,目前队伍:6 9 10

6VS 9 ==》6胜,本场积分 6 XOR 9 = 15,目前队伍:6 10

6VS 10 ==》管他谁胜呢反正不用再比赛了,本场积分 6 XOR 10 = 12

总积分 10 + 15 + 12 = 37。

,团队6和10面脱落,和队10胜。

拿下点的总数是(10)+(15)+(12)= 37


这题一开始一点思路也没有,但是从题中可以看出,n头牛就要比n-1次比赛;

这就是最大生成树;

最大生成树怎么搞;

就可以把所有的边的权值换成负的;

最后输出负的sum就行

第三题

当时想到了,如果发短信就说明它的邻接点无法到达农场,

例如

3发短信,就说明4与2都被毁坏;

但还是不会写代码(代码能力巨弱)
第四题

一开始只是想到从最后一个点开始搜;

但是没有想到图的存储,就被卡住;

后来讨论的时候觉得sj大佬的方法贼牛;

就是把每一个传送阵看作一个点,这样就可以连在一起;

而与终点所在的那个传送阵需要的边数就是天数;

唯一缺点就是不会写代码

原创粉丝点击