07 2013 档案

摘要:题意就不说了,求二部图最大匹配。 问题是怎么建图…… 给定的条件中,h#include const int maxn=201;bool mp[maxn][maxn];bool vis[maxn];int link[maxn];int No[41][10];int n;bool DFS(int x){ for(int y=1;y0) mp[No[i][0]][-No[i-1][0]]=true; else mp[No[i-1][0]][-No[i][0]... 阅读全文
posted @ 2013-07-28 20:49 SF-_- 阅读(402) 评论(0) 推荐(0)
摘要:三道题都是考察最短路算法的判环。其中1860和2240判断正环,3259判断负环。 难度都不大,可以使用Bellman-ford算法,或者SPFA算法。也有用弗洛伊德算法的,笔者还不会SF-_-…… 直接贴代码。 1860Currency Exchange:#include #include int N,M,S;double V;const int maxn=101;int first[maxn],vv[maxn*maxn],nxt[maxn*maxn];double ww[maxn*maxn],cc[maxn*maxn];double d[maxn];int count[maxn]... 阅读全文
posted @ 2013-07-27 15:22 SF-_- 阅读(329) 评论(0) 推荐(0)
摘要:本题不难,但是笔者贡献了30多次Submit……就像Discuss讨论的一样,细节决定成败,WA了肯定有理由。 贴代码,Dijkstra+优先队列。#include #include #include using namespace std;const int maxn = 101;int first[maxn],vv[maxn*maxn],nxt[maxn*maxn],ww[maxn*maxn];int vis[maxn],level[maxn],price[maxn];int Min=~(1cmp.w; }} p,q;void Dijkstra(){ p.k=1; ... 阅读全文
posted @ 2013-07-27 09:59 SF-_- 阅读(566) 评论(0) 推荐(0)
摘要:青蛙跳跃,题意大概是:青蛙从起点到终点进行一次或多次的跳跃,多次跳跃中肯定有最大的跳跃距离。求在所有的跳跃中,最小的最大跳跃距离SF-_-(不理解?看题目吧)。 可以用最小生成树完成。以起点为根,生成一棵最小生成树,直到树里包含了终点。 或者这么说吧,类似于Kruskal算法,我们每次选取不成环的最小边,直到这棵树选取了通往终点的最小边,那么最后选择的这条边必然是在树中最大的一条边,而且在其余的边中是最小的。你不会找到比这条边小的最大距离,因为比它小的最小距离都在树里了,而未选取该边前树中不包含终点,即比该边小的所有边无法到达终点。即改边满足的两个条件,最小,而且是起点到终点的最大距离... 阅读全文
posted @ 2013-07-26 19:28 SF-_- 阅读(1466) 评论(0) 推荐(0)
摘要:原题地址:http://poj.org/problem?id=3159 题意大概是班长发糖果,班里面有不良风气,A希望B的糖果不比自己多C个。班长要满足小朋友的需求,而且要让自己的糖果比snoopy的尽量多。 比如现在ABCD四个小朋友,B的糖果不能超过A的5个,如果A的史努比,D是班长,那么班长最多比史努比多7个糖果,而不是5+4+1=9个。 因为如果是9个,就不满足D-A#include #include #include using namespace std;struct CNode{ int k; int w; bool operatorcmp.w; ... 阅读全文
posted @ 2013-07-26 19:05 SF-_- 阅读(569) 评论(0) 推荐(0)