hdu 4607 Park Visit

2014-11-23 22:13:25 ? 作者: ? 浏览: 3

两次bfs求出最长链d,那么解就有2种情况,如果k<=d+1,那直接输出k-1,也就是在链上走,如果大于d+1,同样也要走这条链,只不过中间要走一些分支来补充。

而走一个分支点消耗的距离是1*2(来回)。1Y

#include
#include
#include
#include
#include
#include
using namespace std;
#define N 100005
int n,m;
vector map[N];
bool vis[N];

int d;
struct node
{
    int pos;
    int dis;
}start,end;
node bfs(node k)
{
    memset(vis,0,sizeof(bool)*(n+5));
    queue Q;
    Q.push(k);
    vis[k.pos]=1;
    node point,tmp;
    while(!Q.empty())
    {
        point=Q.front(); Q.pop();
        for(int i=0;i 
 

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: