• codevs 1503 愚蠢的宠物


    妈呀我真是不知道怎么了裸题都要写挂~~~正宗倍增LCA啊~~~把bfs换成dfs就好了不知道为什么。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<cmath>
    #define maxv 1000005
    #define maxe 1000005
    using namespace std;
    struct edge
    {
    int v,nxt;
    }e[maxe];
    int g[maxv],n,a,b,s,t,nume=0;
    int anc[maxv][25],dis[maxv];
    int ins[maxv],root;
    queue <int> q;
    void addedge(int u,int v)
    {
    e[++nume].v=v;
    e[nume].nxt=g[u];
    g[u]=nume;
    }
    void dfs(int u,int fath)
    {
    dis[u]=dis[fath]+1;
    for (int i=g[u];i;i=e[i].nxt)
    dfs(e[i].v,u);
    }
    void work(int x,int y)
    {
    if (x>y) swap(s,t);
    for (int e=23;e>=0;e--)
    {
    if (dis[anc[t][e]]>=dis[s])
    t=anc[t][e];
    }
    if (s==t)
    {
    printf("%d ",s);
    return;
    }
    for (int e=23;e>=0;e--)
    {
    if (anc[s][e]!=anc[t][e])
    {
    s=anc[s][e];
    t=anc[t][e];
    }
    }
    printf("%d ",anc[s][0]);
    return;
    }
    int main()
    {
    memset(g,0,sizeof(g));
    memset(ins,0,sizeof(ins));
    scanf("%d",&n);
    for (int i=1;i<=n-1;i++)
    {
    scanf("%d%d",&a,&b);
    addedge(a,b);
    anc[b][0]=a;
    ins[b]++;
    }
    for (int i=1;i<=n;i++)
    {
    if (ins[i]==0)
    {
    root=i;
    break;
    }
    }
    scanf("%d%d",&s,&t);
    memset(dis,0,sizeof(dis));
    dfs(root,0);
    for (int e=1;e<=23;e++)
    for (int i=1;i<=n;i++)
    anc[i][e]=anc[anc[i][e-1]][e-1];
    int x=dis[s],y=dis[t];
    work(x,y);
    return 0;
    }

  • 相关阅读:
    【转】Jmeter:图形界面压力测试工具
    【转】WINSOCKET客户端编程以及JMETER外部调用
    【转】Jenkins+Ant+Jmeter自动化性能测试平台
    【转】在Linux下使用Jmeter执行测试任务
    【转】Jmeter之GUI运行原理
    初识Python
    苹果广告1984
    Think different
    JD IPO address by liuqiangdong
    iPhone4 offical AD
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5185534.html
Copyright © 2020-2023  润新知