我们建立了一个由编号为
这些人将通过
- IAmYourFriend:将第
号人仅变成主持人的朋友。 - MyFriendsAreYourFriends:将第
号人变成主持人当前的每一个朋友的朋友。 注意,这个方式不会将第 号人变成主持人的朋友。 - WeAreYourFriends:将第
号人变成主持人的朋友,同时也变成主持人当前的每一个朋友的朋友。
在建立此网络之后,我们想挑选一个调查的样本,也就是说要从网络中选择一组人。由于朋友之间通常拥有相似的兴趣,因此样本不应包含任何一对互为朋友的人。每个人都会有一个调查的可信度,表示为一个正整数,而我们想要找出一个可信度总和最大的样本。
任务
给定各阶段的描述以及每个人的可信度值,请找出一个可信度总和最大的样本。你只需要实现函数 findSample。
- findSample(n, confidence, host, protocol)
: 人数.- confidence: 大小为
的数组;confidence[i]表示第 号人的可信度。 - host: 大小为
的数组;host[i] 表示阶段 的主持人。 - protocol: 大小为
的数组;protocol[i] 表示在阶段 ( ) 所采用的方式的代码: 代表 IAmYourFriend, 代表 MyFriendsAreYourFriends,而 代表 WeAreYourFriends。 - 由于在阶段
中没有主持人,因此 host[0] 和 protocol[0] 是没有被定义的,而且在你的程序中也不应访问它们。 - 这个函数应该返回样本可信度总和的最大值。
子任务
有些子任务只会使用其中部分方式,如下表所示。
子任务 | 分值 | 可信度 | 采用的方式 | |
---|---|---|---|---|
1 | 11 | 全部三种方式 | ||
2 | 8 | 只有 MyFriendsAreYourFriends | ||
3 | 8 | 只有 WeAreYourFriends | ||
4 | 19 | 只有 IAmYourFriend | ||
5 | 23 | 所有可信度值均为 | 只有 MyFriendsAreYourFriends 和 IAmYourFriend 两种方式 | |
6 | 31 | 全部三种方式 |
实现细节
本题只支持 C/C++。
你只能提交一个源文件实现上述的函数,其命名与接口需遵循下面的要求。你还要在该文件中包含头文件friend.h。
int findSample(int n, int confidence[], int host[], int protocol[]);
评测方式
评测系统将会读入如下格式的输入数据:
- 第
行: - 第
行: - 第
行:
评测系统将会输出 findSample 的返回值。
时间限制:
空间限制:
下载
什么你说样例1和样例6是相同的?IOI原题也是相同的,不要不服。