福州大学有奖月赛2015.11C题(foj 2207)以撒的结合

原创 2015年11月18日 20:23:52

题目链接:http://acm.fzu.edu.cn/problem.php?pid=2207
比赛时这题感觉不会,赛后看了一下,其实并不是什么特别难的题目。

  • 以节点1为根节点,找出每一个节点的父亲节点,保存在数组parent[]中。
  • 对于任意两个节点,循环找出两个节点最近的根节点。(Find函数部分)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1005;
const int INF=1<<30;
struct node
{
    int v;
    node* next;
}tree[N*2],*head[N*2];
int u,v,k;
int n,m;
int test;
int parent[N];
int tmp;
bool kk[N];
int vis[N];
int sum;//统计目标房间到根节点的最少经过房间数
void init()
{
    tmp=0;
    memset(parent,0,sizeof(parent));
    memset(head,NULL,sizeof(head));
    memset(vis,0,sizeof(vis));
}
void AddEdge(int u,int v)
{
    tree[tmp].v=v;
    tree[tmp].next=head[u];
    head[u]=&tree[tmp++];
}
void dfs(int s)
{
    node* p=head[s];
    vis[s]=1;
    while(p!=NULL)
    {
        if(!vis[p->v])
        {
            dfs(p->v);
            parent[p->v]=s;
        }
        p=p->next;
    }
}
int Find(int u,int v)
{
    sum=0;
    while(parent[u]>0)
    {
        kk[u]=true;
        u=parent[u];
    }
    while(parent[v]>0)
    {
        if(kk[v])
            return v;
        v=parent[v];
        sum++;
    }
    return 1;
}
int main()
{
    cin>>test;
    for(int ii=0;ii<test;ii++)
    {
        init();
        scanf("%d%d",&n,&m);
        for(int i=1;i<n;i++)
        {
            scanf("%d%d",&u,&v);
            AddEdge(u,v);
            AddEdge(v,u);
        }
        dfs(1);//以1为根节点求出每个节点的父亲节点
        printf("Case #%d:\n",ii+1);
        for(int i=1;i<=m;i++)
        {
            for(int i=0;i<=n;i++)
                kk[i]=0;
            scanf("%d%d%d",&u,&v,&k);
            int x=Find(u,v);
            int ans1=1,ans2=0;
            bool judge=false;
            while(u!=x)
            {
                if(ans1==k)
                {
                    judge=true;
                    cout<<u<<endl;
                    break;
                }
                u=parent[u];
                ans1++;
            }
            if(judge)
                continue;
            k-=ans1;
            k=sum-k;
            while(ans2!=k)
            {
                v=parent[v];
                ans2++;
            }
            cout<<v<<endl;
        }
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

福州大学acm Problem 2207 以撒的结合

Problem 2207 以撒的结合 Accept: 72    Submit: 239 Time Limit: 1000 mSec    Memory Limit : 32768 KB ...
  • lw277232240
  • lw277232240
  • 2017年06月15日 09:35
  • 169

FOJ 2077 有奖月赛题

昨天比赛时浩神写的这道题,当时我想了想,大致有了个思路,只是感觉绝对会超时,所以一直没写。没想到这道题数据弱了,浩神给过了。今天来了后试着写了一下,没想到,这一写就写了快一天。。。。。悲剧。。。已经有...
  • wmn_wmn
  • wmn_wmn
  • 2012年03月26日 16:54
  • 1350

FOJ 2014.3 有奖月赛

FOJ 2014.3  由于跑A区去面试的原因,这次比赛没参加,回来时已经四点多了,过了H题,然后D题交了一发,没考虑一个盟国只有一个国家的情况,wa了一次,之后就结束比赛了…具体说...
  • qingwen_z
  • qingwen_z
  • 2014年03月25日 19:28
  • 510

以撒的结合-重生 n项 修改器

之前用ce找一直找不到, 没办法只能看汇编, 是这样的 mov eax,[002fe72c] mov ecx,[eax+5d98] ... mov ecx,[ecx+ed8] mov ebx,[ecx...
  • nargnos
  • nargnos
  • 2014年12月31日 22:56
  • 710

FOJ有奖月赛3月

福大有奖月赛。。。 A了一题,自己弱得不得了,A题没注意一个问题一直WA。。。 A: 模拟一题。 要你按矩阵的方式输出每个用户对每个文件的权限。。。 没注意到每个用户属于不同组,要把组的个数...
  • u013320038
  • u013320038
  • 2014年03月24日 13:50
  • 608

FOJ有奖月赛-2013年11月

01:fzu 2132 LQX的作业 题意:中文题不解释了。 解题思路:从0-1中拿出一个数,小于等于x的概率是x,所以,选出i个小于等于x的数的概率是x^i,那么在n个位置上,选出i个放小...
  • No__stop
  • No__stop
  • 2013年11月12日 12:01
  • 1535

CCTF重邮(绿盟)杯_部分解密题WriteUp

CCTF重邮(绿盟)杯_部分解密题0X00   Kungfu解开压缩包,里面就是一个图片(又是那个卖如来神掌的老乞丐),按照脑洞惯例跑Stegsolve。在文件底发现了“key is …..”把它复制...
  • wenliheng0
  • wenliheng0
  • 2017年07月31日 10:43
  • 558

中兴捧月蓝剑之路初赛题目——数房子

中兴捧月蓝剑之路初赛题目——数房子:为了规划城市,需要统计房屋数目信息。方法如下,一张航拍照片会被分隔为M*N个小格子,用数字0或1分别表示某格子看到的是空地还是屋顶,相邻的屋顶属于同一栋房子,位于对...
  • c070363
  • c070363
  • 2016年07月24日 09:19
  • 794

福州大学 FOJ有奖月赛-2017年4月(校赛热身赛)(DP)

Problem H Yu-Gi-Oh! Accept: 52    Submit: 704 Time Limit: 1000 mSec    Memory Limit : 32768 KB  P...
  • u014665013
  • u014665013
  • 2017年04月16日 16:13
  • 1049

FOJ有奖月赛-2014年3月

Problem List FOJ有奖月赛-2014年3月 Contest Finished! Tag Pro.ID Problem Title Ratio(AC/Submit) ...
  • u013292846
  • u013292846
  • 2014年03月23日 23:58
  • 1017
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:福州大学有奖月赛2015.11C题(foj 2207)以撒的结合
举报原因:
原因补充:

(最多只允许输入30个字)