随笔分类 -  acm训练

1 2 3 4 5 ··· 8 下一页
摘要:链接:http://wikioi.com/problem/1036/题意不写了。思路:很明显找到lca然后用两个点的深度相加-lca的深度就是这一步的最近步数。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define loop(s,i,n) for(i = s;i g[maxn]; 16 int find(int x) 17 { 18 if(set[x] != x) 19 set[x] = find(set[x]); 20 21 ... 阅读全文
posted @ 2013-10-03 00:48 某某。 阅读(266) 评论(0) 推荐(0)
摘要:链接:http://wikioi.com/problem/1021/这题挺有意思的,虽然比较水,但是让我想起来那次百度or腾讯的一道最大流的题目,很给力,也是对最后找边进行优化,不过这题比那题简单多了,找出最短路,然后对最短路上的变进行一下标记,最后找边的时候只招最短路上的边就可以了。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define loop(s,i,n) for(i = s;i q;42 q... 阅读全文
posted @ 2013-09-27 14:14 某某。 阅读(272) 评论(0) 推荐(0)
摘要:链接:http://wikioi.com/problem/1035/怎么说呢,只能说这个建图很有意思。因为只有m条道,然后能互相接在一起的连通,对每个点进行拆点,很有意思的一道裸费用留题。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 const int maxn = 350; 9 const int inf = 10000000; 10 struct node 11 { 12 int u,v,cap,flow,co... 阅读全文
posted @ 2013-09-27 14:10 某某。 阅读(195) 评论(0) 推荐(0)
摘要:中文题意不描述。链接:http://wikioi.com/problem/1028/这题一开始很裸的最大权二分匹配。但是原来没有接触过,KM的这个最大权不大会。然后一开始以为用最大费用最大流直接就能搞,后来知道单纯的费用流解决的是二分最佳匹配,而不是最大权,QCMM然后看了一下这个http://hi.baidu.com/lerroy312/item/42e718ba58a1f8df85dd795f结果改了之后不对,不知道为什么最后用的最小费用,对边的权值取负值,结果取负值才过。。。不解。。。 1 #include 2 #include 3 #include 4 #include ... 阅读全文
posted @ 2013-09-27 14:06 某某。 阅读(487) 评论(0) 推荐(0)
摘要:LIANJIE:http://poj.org/problem?id=3321给你一个多叉树,每个叉和叶子节点有一颗苹果。然后给你两个操作,一个是给你C清除某节点上的苹果或者添加(此节点上有苹果则清除没苹果就添加)q询问这个节点的子树上有多少个苹果。直接dfs遍历一遍,每个节点给一个时间戳,记录一下遍历玩这个节点是的始终时间戳,直接对时间戳进行询问即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define loop(s,... 阅读全文
posted @ 2013-09-02 16:56 某某。 阅读(231) 评论(0) 推荐(0)
摘要:连接:http://poj.org/problem?id=1191思路:额,其实就是直接搞记录一下就可以了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define loop(s,i,n) for(i = s;i = 0) return dp[k][x][y][xx][yy];46 if(k == n)47 return sum[x][y][xx][yy];48 49 int i,j,ans;... 阅读全文
posted @ 2013-09-02 16:31 某某。 阅读(489) 评论(0) 推荐(0)
摘要:连接:http://poj.org/problem?id=1054题意:就是一个格子里一条线上最长有几个青蛙(青蛙间隔相同)~。但是其实青蛙的起点重点必须是在外面。直接写一个搜就是。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define loop(s,i,n) for(i = s;i = 1 && x = 1&&y <= c)27 return 1;28 29 return 0;30 31 }32 int find( 阅读全文
posted @ 2013-09-02 16:29 某某。 阅读(223) 评论(0) 推荐(0)
摘要:题目连接:http://poj.org/problem?id=3280题意就是给你一个字符串,含有n个字母,每个字母可以添加可以去除,添加和删除字母有花费,问组成一个回文串。思路就是每个回文串的最大子串必定有一个开头一个结尾位置,最终位置为0~len-1,这样但是每一对起始位置都会有一个回文长度,对每一个长度进行搜就可以了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define loop(s,i,n) for(i ... 阅读全文
posted @ 2013-09-02 16:25 某某。 阅读(215) 评论(0) 推荐(0)
摘要:连接:http://poj.org/problem?id=2029题意:给你一个map,然后在上面种树,问你h*w的矩形上最多有几棵树~这题直接搜就可以。不能算是DP用树状数组也可作。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define loop(s,i,n) for(i = s;i > n && n){21 memset(map, 0, sizeof(map));22 memse... 阅读全文
posted @ 2013-09-02 16:09 某某。 阅读(155) 评论(0) 推荐(0)
摘要:题意:给你一棵树,每条边都有值W,然后问你去掉一条边,令val = w*max(两颗新树的直径),求val最小值~做法,先求树的直径,然后算出直径上每个点的最长枝条长度。这样对于每一条边,假如是枝条边,那么val = w*直径,如果不是那么val = max(w*(两颗新树的直径))。新树直径说到这里已经很好算了。DFS爆栈了一下午 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define loop(s,i,n) for(i... 阅读全文
posted @ 2013-08-19 18:51 某某。 阅读(282) 评论(0) 推荐(0)
摘要:链接:题意就是告诉你一个扫雷图里面每个雷的位置,有两个人,每个人都知道雷的确切位置,每个人一次可以点一部,问你谁能赢。链接:http://acm.hdu.edu.cn/showproblem.php?pid=4678思路:整张图有三种格子,一种是空白,一种是带数字的,一种是雷。我们可以根据雷知道整张地图。如果我们点空白那么跟空白连通的数字(不可能有雷)和空白都会显示出来。也就是说数字又可以分为跟空白连着的和不连着的。整个游戏的输赢是与这局所走的总步数有着直接关系,如果是偶数那么后手赢,否则先手赢。那么与空白连着的数字一定被点与否一定会决定着真个游戏的走势,而不与空白相连的数字不管奇偶性都是要被 阅读全文
posted @ 2013-08-18 21:17 某某。 阅读(436) 评论(0) 推荐(0)
摘要:题意:不说了很好懂、这题这么水= =。。。当时竟然没有勇气暴力搜一下。昨天(好吧前天。)比赛的时候胃疼,看到这题想了一个办法就是对每一个出现最短的C串前后连接然后对这个串求最长公共子序列。其实优化一下就是现在的答案啊~~!!!!给赵鹏说了赵鹏说不可能这么过。。然后就没想。就这样这么水的一道题都没过!!!!桑心啊~代码: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 char sa[1005]; 7 char sb[1005]; 8 char sc[1005]; 9 int c[... 阅读全文
posted @ 2013-08-17 01:58 某某。 阅读(305) 评论(0) 推荐(0)
摘要:题意:给你N个珠宝和一个K,每个珠宝上面都有数字,这个珠宝做成项链,把珠宝上的数字拼起来如果可以整除掉K,那么久说这个数字为wonderful value,问你有多少种方案可以组成WONDERFUL VALUE。对每个数取余并记录多少位,这样的话拼数的时候好操作。详细解法贴个结题报告吧。代码: 1 #include 2 #include 3 using namespace std; 4 int dp[50005][300]; 5 int a[100005]; 6 int len[100005]; 7 int decmod[50005 1;i--)56 {57 ... 阅读全文
posted @ 2013-08-16 21:18 某某。 阅读(258) 评论(0) 推荐(0)
摘要:题意:给你N 城市和M条道路,每条道路要付的钱,但是如果你在这个道路上你可以付其他道路的钱(跟走到的时候去的话不一样),问你从1走到N最少话费是多少。直接DFS搜。链接http://poj.org/problem?id=3411代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define loop(s,i,n) for(i = s;i g[15];19 int vis[15];20 int ans;21 int n,m;22 void ... 阅读全文
posted @ 2013-08-16 16:10 某某。 阅读(262) 评论(0) 推荐(0)
摘要:题意:给你N个城市和M条路和K块钱,每条路有话费,问你从1走到N的在K块钱内所能走的最短距离是多少链接:http://poj.org/problem?id=1724直接dfs搜一遍就是代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define loop(s,i,n) for(i = s;i dis)31 ans = dis;32 return ;33 }34 35 if(ans < di... 阅读全文
posted @ 2013-08-16 16:07 某某。 阅读(197) 评论(0) 推荐(0)
摘要:当时自己做的时候没有这么想,想的是每个象限去找一个无穷值来作为比较点。但是很麻烦代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define loop(s,i,n) for(i = s;i mst[50];21 for(i = 1;i ::iterator it;60 it = mst[j].find(sum);61 62 ... 阅读全文
posted @ 2013-08-14 15:33 某某。 阅读(211) 评论(0) 推荐(0)
摘要:题意:有一个n*m的矩阵,告诉了在每一行或者每一列安装大炮的代价,每一个大炮可以瞬间消灭这一行或者这一列的所有敌人,然后告诉了敌人可能出现的L个坐标位置,问如何安置大炮,使花费最小。如果一个敌人位于第r行c列,则他可以被第r行或者第c列的大炮消灭。链接:http://poj.org/problem?id=3308这题突然就让我想起来那个多校的那道多米诺骨牌的那个,几乎一样的模型,还不过要把权值改一下,因为权值是相乘,那么就吧权值改成相加,也就是用log去改变。这样的话 如果坐标为x,y的点要被消灭,那么要么走x要么走y,这样的话就直接是一个二分图的形式了。一边是行,一边是列,用出现的点连边,就 阅读全文
posted @ 2013-08-14 01:11 某某。 阅读(381) 评论(0) 推荐(0)
摘要:题目大意:给定一些城市,然后再给一些寄信的路信,A,B,H代表把信从A城市寄到B城市需要H小时。如果没有直接可以寄达的,可以先通过另外一个城市到达,比如A,B可以寄信,B,C可以寄信,那么,A,C也可以寄信。其中两个城市之间如果可以相互寄信的话,那么这两个城市是属于一个国家的,寄信可以通过电子邮件,所以所需的时间为0.题目中有K个询问,输入A,B询问A到B之间寄信最少需要多少时间。连接:http://poj.org/problem?id=3114距离为零肯定就是强连通分量嘛~。一开始是打算用的缩点FLOYD,结果超时。但是搜了一下,有人用floyd就不超时,叫秦川看了下,秦川也不晓得,他自己写 阅读全文
posted @ 2013-08-12 20:07 某某。 阅读(194) 评论(0) 推荐(0)
摘要:题意:一个连通的无向图,求至少需要添加几条边,救能保证删除任意一条边,图仍然是连通的。链接:http://poj.org/problem?id=3352思路:边的双连通图。其实就是要求至少添加几条边,可以使整个图成为一个边双连通图。用tarjan算法(求割点割边)求出low数组,这里可以简化,然 后依据“low相同的点在一个边连通分量中”,缩点之后构造成树(这里可以直接利用low[]数组,low[i]即为第i节点所在的连通分量的标号)。求 出树中出度为1的节点数left,答案即为(leaf+1)/2。代码: 1 #include 2 #include 3 #include 4 #... 阅读全文
posted @ 2013-08-12 02:23 某某。 阅读(399) 评论(0) 推荐(0)
摘要:问加一条边,最少可以剩下几个桥。先双连通分量缩点,形成一颗树,然后求树的直径,就是减少的桥。本题要处理重边的情况。如果本来就两条重边,不能算是桥。还会爆栈,只能C++交,手动加栈了别人都是用的双连通分量,我直接无向图改成有向图搞得强连通水过。 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 10 using namespace std; ... 阅读全文
posted @ 2013-08-11 17:49 某某。 阅读(436) 评论(0) 推荐(0)

1 2 3 4 5 ··· 8 下一页