摘要: 该题反过来想:将所有可能发生恋爱关系的男女配对,那么可以带出去的人数应该等于这个二分图的最大独立集 先要做一下预处理,把不符合要求的双方先求出来, company[i][j]表示i、j四个标准都不符合,即他们可能会成为伴侣。这里要注意因为x、y集合都是0~n-1,左右对称,所以求最大点独立集的点的个数时,最后还要/2。接下来就是求最大独立集的点的个数。最大点独立集+最小点覆盖=点的个数 独立集:在集合中的任意两点都不相邻,即两点间不存在边#include #include #include #include using namespace std;const int maxnx=510;con 阅读全文
posted @ 2013-08-25 17:07 辰曦~文若 阅读(307) 评论(0) 推荐(0)
摘要: 题意:有R条路,每条路都有一定的路长和花费,问在总的花费小于一定的值的情况下,从1到N的最短路程 注意:这里两点之间单向边,且可能存在很多条路,所以只能用邻接表存储。思路:用dijkstra,但是每次判断一个元素是否能进入队列,并不是源点到它的距离被更新了才入队, 而是只要满足从源点到该点总的路费小于给定的值,都可入队。 每次从优先级队列中取出路程最小(如果路程相同,取花费最小)的点。 当N点被取出来时,直接结束#include #include #include #include #include #include #include using namespace std;const ... 阅读全文
posted @ 2013-08-25 13:12 辰曦~文若 阅读(204) 评论(0) 推荐(0)
摘要: 题意:现在已有m条单向路,问在给你的k条双向路中选择一条,使得s到t的距离最短思路:设双向路两端点为a,b;长度为c。 s到t的有三种情况: 1:原本s到t的路径 2:从s到a,a到b,b再到t的路径 3:从s到b,b到a,a再到t的路径 s到t的最短路径即三者之间的最小值,枚举每个双向路,取其中的最小值即可。 用两次dijkstra,第一次求s到其它点的距离(正向图),第二次求t到其它点的距离(反向图) 因为实际上我们要求的是其它点到t的距离,所以在第二次用dijkstra时,是在原先图的反向图基础上,求t到其它点的距离。#include #include #in... 阅读全文
posted @ 2013-08-25 12:47 辰曦~文若 阅读(327) 评论(0) 推荐(0)
摘要: 题意:每个城市举办庆祝有一定的花费,A在路径上会选择庆祝花费最大的城市 让你求,A回家所花的路费和庆祝费最少,也就是说并不是最短路径就是结果, 还有可能就是路费比最短路径的多,但是庆祝费就比它的少,总的加起来可能更小。思路:枚举每个城市作为庆祝的点,设为x。以x为源点,用dijks求单源路径,路径上如果有大于x庆祝费的点,则不考虑进去。 求完所有点到x的单源路径后,用两重j、k的for循环,同步更新从j到k所需要的最小花费#include #include #include #include #include #include #include #include using... 阅读全文
posted @ 2013-08-25 11:10 辰曦~文若 阅读(348) 评论(0) 推荐(0)
摘要: 用map建立从货币名称到序号的映射,看做节点,汇率则看做边权,是单向路。用floyd,只不过这里把加号变成乘号,而且是两点间的最大值。 最后求是否有这么一点,从该点出发,再回到该点,总的值大于1。注意: 不能使用dijaskra,因为增值的方法不一定是优先选择权值最大的路径,有可能是一开始的汇率小,但之后就大,总的乘积大于1. 所以要用以动态规划为基本思想的floyd来做。#include #include #include #include #include #include #include #include using namespace std;map currency; //建... 阅读全文
posted @ 2013-08-25 10:26 辰曦~文若 阅读(257) 评论(0) 推荐(0)
摘要: 求最短路,以草儿所在的地方设为0,当做源点,草儿临近的城市到草儿的距离设为0这里有一点要注意:并不是1~N的城市都出会出现,所以我用city数组来存储出现过的城市编号,如city[i]=1表示 i 出现在数据里,这样就减少不必要的遍历。#include #include #include #include #include #include #include using namespace std;const int maxn=0x3f3f3f3f;int road[1010][1010];//road[i][j]表示i与j的距离(这里指进过该条路的时间)int dis[1010];//dis 阅读全文
posted @ 2013-08-25 10:08 辰曦~文若 阅读(140) 评论(0) 推荐(0)
摘要: 求1到N的最短路径,模板题,以1为源点,用dijkstra算法(可以用优先级队列优化)#include #include #include #include #include #include #include using namespace std;const int maxn=0x3f3f3f3f;int road[110][110];//road[i][j]表示i与j的距离(这里指进过该条路的时间)int dis[110];//dis[i]表示i点到源点1的最短路径大小int vis[110];//vis[i]=1表示节点i已经求过到源点的单源最短路径vector link[110];/ 阅读全文
posted @ 2013-08-25 09:53 辰曦~文若 阅读(284) 评论(0) 推荐(0)
摘要: 没想到,我的大学里第一个暑假,9周的时间只有最初的两周在家待着,接下来的7周将会在学校度过。 说真的,这是我上学以来,第一次真正好好利用的假期。在这五周里,周一、三、五下午学长都会给我们讲点知识,之后会给我们题目让我们去A。 因为我一切都是从0开始的,基本上大多数题目都是看网上题解后才做的,很少是从头到尾全靠自己能力AC的。不过,毕竟是一开始嘛,总有不熟悉的,接触久了,自然会有提升。听学长说,搞ACM是很费精力的一件事。我知道这条路很漫长,也许最终不一定能得好的结果,但是既然选择了,就要为之付出、为之努力。 下一周,也就是第六周,将会有三场新成员的单切赛,希望能发挥好一点吧,做不出来也没事,. 阅读全文
posted @ 2013-08-24 20:27 辰曦~文若 阅读(293) 评论(0) 推荐(0)
摘要: 题意:求解最小生成树的权值是否唯一,即要我们求次小生成树的权值两种方法求最小生成树,一种用prim算法, 一种用kruskal算法 一:用prim算法 对于给定的图,我们可以证明,次小生成树可以由最小生成树变换一边得到。 那么我们可以如下求给定图的次小生成树。首先,我们用prime算法求出图的最小生 阅读全文
posted @ 2013-08-24 20:06 辰曦~文若 阅读(275) 评论(0) 推荐(0)
摘要: 题意:破坏石油管道,现一直破坏各个管道所要付出的代价,问在有一定money并且要保证剩余的管道为生成树的情况下, 最多能破坏多少个管道,并将他们的编号从小到大输出来思路:将边从大到小排序,构造生成树。 接下来最后剩余的不在最大生成树的边,从最小开始在满足条件下依次取即可。这里注意: 答案不唯一,输出其中之一即可。#include #include #include #include #include #include using namespace std;int n,m;int blank=0;long long s;int a,b,cost;int ans[105000];//若flag为 阅读全文
posted @ 2013-08-24 19:55 辰曦~文若 阅读(434) 评论(2) 推荐(0)