【CodeForces - 574B】Bear and Three Musketeers (枚举边,思维,优秀暴力)

题干:

Do you know a story about the three musketeers? Anyway, you will learn about its origins now.

Richelimakieu is a cardinal in the city of Bearis. He is tired of dealing with crime by himself. He needs three brave warriors to help him to fight against bad guys.

There are n warriors. Richelimakieu wants to choose three of them to become musketeers but it's not that easy. The most important condition is that musketeers must know each other to cooperate efficiently. And they shouldn't be too well known because they could be betrayed by old friends. For each musketeer his recognition is the number of warriors he knows, excluding other two musketeers.

Help Richelimakieu! Find if it is possible to choose three musketeers knowing each other, and what is minimum possible sum of their recognitions.

Input

The first line contains two space-separated integers, n and m (3 ≤ n ≤ 4000, 0 ≤ m ≤ 4000) — respectively number of warriors and number of pairs of warriors knowing each other.

i-th of the following m lines contains two space-separated integers ai and bi (1 ≤ ai, bi ≤ nai ≠ bi). Warriors ai and bi know each other. Each pair of warriors will be listed at most once.

Output

If Richelimakieu can choose three musketeers, print the minimum possible sum of their recognitions. Otherwise, print "-1" (without the quotes).

Examples

Input

5 6
1 2
1 3
2 3
2 4
3 4
4 5

Output

2

Input

7 4
2 1
3 6
5 1
1 7

Output

-1

Note

In the first sample Richelimakieu should choose a triple 1, 2, 3. The first musketeer doesn't know anyone except other two musketeers so his recognition is 0. The second musketeer has recognition 1 because he knows warrior number 4. The third musketeer also has recognition 1 because he knows warrior 4. Sum of recognitions is 0 + 1 + 1 = 2.

The other possible triple is 2, 3, 4 but it has greater sum of recognitions, equal to 1 + 1 + 1 = 3.

In the second sample there is no triple of warriors knowing each other.

题目大意:

给你n个人和m个关系,(a,b)表示a和b认识,现在这个人想雇佣其中3个人,

1: 这3个人必须相互认识

2: 这3个人的识别度的总和最小(一个人的识别度为:除了另外两人认识的人的数,三个人的识别度相加最小)

解题报告:

    显然,2000ms的时限,4000的数据量,考虑是否o(n^2)可以解决。(其实这题直接枚举三个点,o(n^3)也可以过?)怎么优化到平方级别呢?其实也很简单,就是第一层循环遍历m条边就好了。因为你三层for枚举顶点的时候,其实前两层有很多是浪费掉了的,因为有很多顶点的之间根本没有边,而你都遍历了一遍,所以我们都记录下来边了,为什么不直接遍历边呢?这样我们就有两个顶点了呀,然后再来一层循环遍历每一个点就好了。注意这种暴力的题一定别忘判断一下是否遍历到了自己,比如【CodeForces - 761C】Dasha and Password 这道题,最开始就忘了判断是否遍历到了同一个字符串。

AC代码:

#include<bits/stdc++.h>using namespace std;
const int MAX = 4000 + 5 ;
int du[MAX];
bool maze[MAX][MAX];
int head[MAX];
struct Edge {int fm,to;int w;
}e[50000 + 5];
int top;
void add(int u,int v) {e[++top].fm = u;e[top].to = v;
}
int main()
{int n,m,u,v;cin>>n>>m;for(int i = 1; i<=m; i++) {scanf("%d%d",&u,&v);add(u,v);add(v,u);du[u]++;du[v]++;maze[u][v] = maze[v][u] = 1;}int ans = 0x3f3f3f3f;for(int i = 1; i<=top; i++) {for(int j = 1; j<=n; j++) {if(j == e[i].fm || j == e[i].to) continue;if(maze[e[i].fm][j] && maze[e[i].to][j]) {ans = min(ans,du[e[i].to] + du[e[i].fm] + du[j]);}}}if(ans == 0x3f3f3f3f) puts("-1");else printf("%d\n",ans-6);return 0 ;} 

再来一个代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int inf = 0x3f3f3f3f;
const int maxn = 4050;int n,m,d[maxn];
bool g[maxn][maxn];
//一开始以为暴力的话是n^3会超时,后来看了题解原来前两层放上去之后加个剪枝,第三层的复杂度是加上去的而不是乘上去的 
//即剪枝使得复杂度由O(N^3)降为O(N^2+NM) 
int main(){//62 ms	18100 KBint x,y;scanf("%d%d",&n,&m);for(int i=1;i<=m;++i){scanf("%d%d",&x,&y);g[x][y]=g[y][x]=1;d[x]++;d[y]++; }int ans=inf;for(int i=1;i<=n;++i){for(int j=1;j<=n;++j){if(g[i][j] && d[i]+d[j]<=inf){//只有M个g[i][j]成立  for(int k=1;k<=n;++k){if(g[i][k] && g[j][k]){ans=min(ans,d[i]+d[j]+d[k]);}}}}}//相当于外面枚举N^2次,对于其中的M次才有第三层for 故复杂度为 O(N^2+M*N) if(ans>=inf) puts("-1");else printf("%d\n",ans-6);return 0;
}

 

 

 

AC代码2:(其实也不是拓扑排序啦,就是用vector表示了二维数组,并且,由第二个点找第三个点的时候直接在第一个点所连的边中找就可以了。但是那个c函数其实也有点消耗时间?如果直接用个bool类型的maze二维数组来表示无向图两点之间是否相连就更快了)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CodeForces - 574C】Bear and Poker(思维,剪枝,数学)

题干&#xff1a; Limak is an old brown bear. He often plays poker with his friends. Today they went to a casino. There are n players (including Limak himself) and right now all of them have bids on the table. i-th of them has bid with size ai dollars. Ea…

stm32linux区别,STM32MPU和OpenSTLinux你了解多少?

早在2019年年初的时候&#xff0c;ST就发布了首款STM32MPU&#xff1a;STM32MP1。 STM32MP1通用微处理器产品系列&#xff0c;系基于混合的 双Arm Cortex-A7核 和 Cortex-M4核架构产品。 一、支持STM32MPU 生态系统熟悉 Cortex-M4 MCU 环境的开发人员能轻松实现他们的目标&…

linux安全模式改文件,嵌入式Linux的安全模式设计 - 嵌入式操作系统 - 电子发烧友网...

本系统的架构如下图&#xff1a;产品所使用的flash总大小为16M。系统包括三大部分&#xff0c;即Bootloader&#xff0c;config, kernel rootfs&#xff1a;另外&#xff0c;/dev/mtdblock/0&#xff0c;在系统中对应整个flash block&#xff0c;即整个16M空间。系统启动时&am…

基于arm下的Linux控制,基于ARMuCLinux的网络控制系统设计与实现

引言 随着网络和通信技术的发展&#xff0c;嵌入式系统现已进入高速发展阶段。并在社会各个领域得到了广泛的应用。本文介绍了一种采用ARMuCLinux作为开发平台。实现基于TCP&#xff0f;IP的远程系统监控&#xff0e;从而取代传统单片机来实现数据采集、预处理和通信功能&am…

nodejs 监控linux,linuxServerMonitoring

linux服务器监控平台技术&#xff1a;nodejs vue java mongodb springboot linux shelllinux服务器监控项目&#xff0c;前后端分离vuespringbootmongodb&#xff1a;1、启动前台&#xff1a;使用命令&#xff1a;A 先安装nodejs并配置好环境变量B 先控制台cmd命令切换到项目目…

c语言中short作用,C语言short

C语言short教程C语言short定义详解语法short int varname value;short varname1 value2; //简写形式参数参数描述short int定义 short 类型变量使用的类型。varname变量名。value可选&#xff0c;变量的初始值&#xff0c;该值不可以超过 short 类型的最大值。说明使用 short…

c语言学生对老师的评教系统,学生对老师的评价

学生对老师的评价1、老师授课的方式十分适合我们&#xff0c;他根据本课程知识结构的特点&#xff0c;重点突出&#xff0c;层次分明。理论和实际相结合&#xff0c;透过例题使知识更条理化。但授课速度有点快&#xff0c;来不及记录。2、老师在生活工作中给人的感觉是生活朴素…

【HDU - 1254 】推箱子 (双bfs)

题干&#xff1a; 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个角上(如图2)那么箱子就不能再被移动了,如果箱子被推到一面墙…

知识点 组合数学 卡特兰数

关于卡特兰数 卡特兰数是一种经典的组合数&#xff0c;经常出现在各种计算中&#xff0c;其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 914…

Android万能遥控菜单选择添加,Android万能遥控器小应用

在很久很久以前&#xff0c;手机是有红外功能的&#xff0c;后来随着蓝牙技术的成熟&#xff0c;红外逐渐被蓝牙取代&#xff0c;不再是标配了。红外本身还是有些优点&#xff0c;比如操作简便&#xff0c;成本低。要想在手机上添加红外功能&#xff0c;就要外接一个转换模块。…

android studio 库工程,Android Studio 添加已有工程方法

准备工作&#xff1a;修改 excluded-paths和android.iml&#xff0c;修改内容详见下图。(目的&#xff1a;过滤和优先在sourcefolder查找&#xff0c;若没有再到JAR包中查找)BorqsUI/LINUX/android/development/tools/idegen$ mm编译出来&#xff1a;[100% 3/3] Install: out/h…

【HDU - 3951】Coin Game (博弈,猜规律,对称博弈)

题干&#xff1a; After hh has learned how to play Nim game, he begins to try another coin game which seems much easier. The game goes like this: Two players start the game with a circle of n coins. They take coins from the circle in turn and every time…

一加6怎么刷android p6,一加6秒速跟进安卓P 教你尝鲜速成开发者

今年5月份&#xff0c;谷歌在I/O开发者大会上发布了全新的Android P操作系统&#xff0c;而在Android P系统发布后的没多久&#xff0c;一加手机官方就公开承诺&#xff0c;年度旗舰一加手机6将会成为首批次升级谷歌Android P系统的机型。而现在&#xff0c;一加已经开始兑现此…

【CodeForces - 1047B 】Cover Points (数学,构造,思维)

题干&#xff1a; There are nn points on the plane, (x1,y1),(x2,y2),…,(xn,yn)(x1,y1),(x2,y2),…,(xn,yn). You need to place an isosceles triangle with two sides on the coordinate axis to cover all points (a point is covered if it lies inside the triangle …

html5引擎笔试题,最新!HTML5经典面试题型(附答案)

HTML已更新至HTML5&#xff0c;那么HTML5的测试题您也应该知道&#xff0c;这篇文章可以作为您的参考。1.doctype有什么作用呢&#xff1f;如何区分其混合模式和标准模式&#xff1f;所有这些都意味着什么&#xff1f;Doctype的作用是告诉浏览器使用HTML规范的哪个版本来渲染文…

html 弹出加载页面,magnific popup:将整个html页面加载到弹出窗口中

我想用弹出的插件在弹出窗口中加载一个完整的html页面。如果我尝试&#xff1a;Edit images$(#edit-images-btn).magnificPopup({type: ajax});它产生了这个&#xff1a;这在图形上非常符合我的要求&#xff0c;但问题是的内容直接插入到dom中&#xff0c;而不是放在保护性的if…

网页html 图片横向摆放,css实现多张图片横向居中显示的方法

先讲一下实现的步骤&#xff1a;最终效果2. 代码实现HTML部分分类小贴士CSS部分.main{width:100%;margin-top:40px;}.main .tag{margin:0 auto;width:200px;font-size:18px;border-bottom:1px solid #878787;text-align:center;margin-bottom:20px;}.main .images{margin:0 aut…

数论中的无数公式 总结

斯特林公式是一条用来取n阶乘近似值的数学公式。一般来说&#xff0c;当n很大的时候&#xff0c;n阶乘的计算量十分大&#xff0c;所以斯特灵公式十分好用&#xff0c;而且&#xff0c;即使在 n很小的时候&#xff0c;斯特灵公式的取值已经十分准确。 公式为&#xff1a; 以下…

用计算机唱出惊雷,除了《惊雷》还有多少喊麦神曲?这十首神作你一定听过!...

一首《惊雷》可以说是火遍了大江南北&#xff0c;一时间风头无二。而这两天杨坤对《惊雷》的diss、惊雷原唱六道的回应更是成为全网热搜&#xff0c;这也让以《惊雷》为首的“喊麦文化”再次进入了公众的视线。事实上除了《惊雷》&#xff0c;还有不少脍炙人口的喊麦神曲&#…

计算机编程是考研什么专业,程序员考研该不该继续选择计算机专业

首先&#xff0c;近些年来确实有不少程序员会选择通过读研来突破自身的岗位发展瓶颈&#xff0c;大部分程序员在读研后也都获得了岗位升级&#xff0c;还有一部分程序员会继续读博&#xff0c;从而进入到科研和教育领域发展。从当前的技术发展趋势和人才需求趋势来看&#xff0…