-
http://codeforces.com/contest/445/problem/B 题意:一共有n种化学药品。m对关系,每对关系表示为x,y表示x和y相互反应。初始容器的danger值为1,当向容器中加入一个化学药品A,如果容器中存在化学药品和A反应,那么容器的danger值翻倍。否则不变。问一个最优的放置药品的顺序。 思路:容易发现。如果两个药品相互反应就连一条边。实际上这些药品构成了一个森林。而一个节点只要不是树的根节点,那么它在任何位置,对答案的贡献度都是*2.反过来说。所有的节点,只有根节点是对答案没有贡献的。那实际上,我们只需要dfs一遍,得到树的数目,用n减去树的数目,就是对答案有贡献的点的数目。 要注意开long …
Read More -
http://codeforces.com/problemset/problem/522/A 题意:给定某条消息的传播路径。问最远传播的距离。。 思路:其实就是问树的深度。。直接dfs就行了。。 存的时候用map<string,vector > mp;的方式存即可。 /* *********************************************** Author :111qqz Created Time :2015年12月05日 星期六 16时41分41秒 File Name :code/cf/problem/522A.cpp …
Read More -
http://codeforces.com/contest/500/problem/B 题意:给定一个1至n的数的一种排列。给定一个n*n的矩阵,a[i][j]==0代表pi,pj不可以交换,a[i][j]为1代表p[i],p[j]可以交换。 问字典序最小的排列。。 思路:把矩阵看成图的关系。。反正n很小。。跑一遍floyd..得到可以间接交换的点。。然后冒泡排序就好。。只有p[i]>p[j]并且a[i][j]的时候交换。 /* *********************************************** Author :111qqz Created Time :2015年12月05日 星期六 15时00 …
Read More -
http://codeforces.com/contest/377/problem/A 题意:给定一个n*m的maze. ‘.’代表空,‘#’代表墙。要求构造一种方案,使得将k个空格填成墙壁后不影响当前的连通性(即没有被填充的空格之间可以相互到达) 思路:一开始想从上往下从左往右构造。错误的认为四个角一定是可以变成墙的。 但其实只要是可能在某条路径上的点,就都不一定可以变成墙。。而四个角显然可以被某条路径经过。 正确的解法很巧妙。以任意一个空格开始跑一遍dfs,设空格一共有sum个,那么就dfs到(sum-k)个。可以做好标记。通过dfs得到的这(sum-k)之间一定是联通的。那么只要填充剩下的就可以了。 /* …
Read More -
http://codeforces.com/contest/129/problem/B 题意:n个点。m条边。每一次会将图中度为1的点加入到等待队列中。然后一起删掉,记为一次操作。当删掉一个点的时候,与它相连的边也全部删掉。问一共做进行多少次操作。使得图中不再有度为1的点。 思路:重点是用开一个数组deg[i]记录点i的度。这样比用.size()高明太多。。因为我们并不需要知道具体删了哪条边。我们只要知道与点i相连的点的边数因为点i被删除而减少了1. /* *********************************************** Author :111qqz Created Time :2015年12月05日 …
Read More -
http://codeforces.com/contest/580/problem/C 题意:给出一棵树。每个叶子节点上有一个饭店。某些节点上有cat.现在问从根节点出发可以到达多少个饭店,保证在到达饭店的路径中补连续遇到m个以上的cat. 思路:建图,然后dfs..判断为叶子节点(饭店)的方法是某个点的叶子节点数为0. /* *********************************************** Author :111qqz Created Time :2015年12月05日 星期六 10时17分01秒 File Name :580C.cpp …
Read More -
http://codeforces.com/problemset/problem/115/A 题意:给出n个人之间的上级下级关系。问如何分得最少的组,使得没一组中的人不存在上下级关系。 思路:用树的观点来考虑会很容易。可以看成给了一棵森冷。对于不同的树的相同层的点,不存在上下级关系,可以放在一个group.对于同一棵树,每一层要单独放一个group.所以答案是所有树的深度的最大值。 /* *********************************************** Author :111qqz Created Time :2015年12月04日 星期五 21时31分38秒 File Name …
Read More -
http://codeforces.com/contest/591/problem/B 题意:给定一个字符串。给出m组替换。对于某一组替换,给出x,y。将字符串中所有的字符x换成y,所有的字符y换成x. 字符串仅包含英文小写字母。 思路: 可以用一个char 到 char 的map 初始映射本身。。 然后进行m次修改。。需要注意的是,每一次修改要修改全部。。因为当进行完i次修改而要进行i+1次修改的时候。。value值为x的可能不止一个。。所以要从a到z都扫一遍。。 /* *********************************************** Author :111qqz Created Time :2015 …
Read More -
题意:一个长度为l的走廊。两个人站在两端点。互相向对方发射某种魔法。A的魔法速度为p米/秒,B的魔法速度为q米/s,魔法相遇以后会反射。反射会发射人那里会再次发射。问两种魔法第二次相遇的时候距离A的距离。 思路:由于每种魔法的速度保持肯定不变。。所以不管第几次相遇。相遇点都是同一个。。。ans=p*(p+q)/l; /* *********************************************** Author :111qqz Created Time :2015年12月04日 星期五 19时12分56秒 File Name :code/cf/#327/A.cpp …
Read More -
http://codeforces.com/contest/598/problem/D 题意:给第一个地图。 ‘.’是能走的,‘’是不能走的。**每个‘.’和''之间有一幅画,**给出k个起点,问对于每组起点,最多能观察到多少副画。 思路:dfs.要注意即使只有一个‘*’,从不同方向访问仍然算不同的画。这样就不用标记画是否访问过了。一开始直接暴力dfs..TLE 10 然后发现,如果是在同一个联通快内,能看到的画的最大值是确定的。。如果之前有同一个联通快内的其他点dfs过得到过答案,那么下次就不用再dfs了。。。记得把之前的记过保存下来。。 我具体的写法是把某一次dfs进过的点的恒纵坐标都存起来。。。然后dfs结束后把更新这些沿途中 …
Read More