摘要: 题目链接:http://poj.org/problem?id=3114思路:题目要求很简单,就是求两点之间的花费的最短时间,不过有一个要求:如果这两个city属于同一个国家,则花费时间为0。如何判断一个是属于同一个国家呢?就要缩点了,这样属于同一个强连通分量的点就是属于同一个国家了。然后就是SPFA求最短路。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define MAXN 55510 #define inf 1 >map;2 阅读全文
posted @ 2013-07-22 19:55 ihge2k 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2762思路:首先当然是要缩点建新图,由于题目要求是从u->v或从v->u连通,显然是要求单连通了,也就是要求一条长链了,最后只需判断链长是否等于新图顶点个数即可,至于如何求一条链长,直接dfs即可,注意点就是dfs是要从入度为0的顶点开始。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 1010 9 10 int low[MAXN],dfn[MAXN],col 阅读全文
posted @ 2013-07-22 17:31 ihge2k 阅读(416) 评论(1) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3352思路:可以求出所有的桥,把桥删掉。然后把所有的连通分支求出来,显然这些连通分支就是原图中的双连通分支。把它们缩成点,然后添上刚才删去的桥,就构成了一棵树。在树上添边使得树变成一个双连通分支即可,这里我们可以直接统计缩点后的叶子节点个数即可,从而要加的边数即为(叶子节点个数+1)/2. 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define MAXN 222210 阅读全文
posted @ 2013-07-22 10:15 ihge2k 阅读(310) 评论(0) 推荐(0) 编辑