ACdream 1728 SJY's First Task

简单题。

先建树,我用邻接表来存了。然后对于每个叶子结点DFS一下,DFS深度超过了K就return,找到了叶子节点就记录下来,最后排个序,然后输出答案。

由于结点编号比较奇葩,所以用两个map来转换一下。这个代码写的很丑,大半夜写的,迷迷糊糊。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<string>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;

char s[1000];
map<int, int>zh;
map<int, int>ff;
vector<int>ljb[100000];
int flag[100000], rr[100000];
int ls, K, ye;
int u[1000], k[105];
struct ANS
{
    int A, B, C;
}ans[10000 + 10];
int gh = 0;

bool cmp(const ANS&a, const ANS&b)
{
    if (a.A == b.A&&a.B == b.B) return a.C<b.C;
    if (a.A == b.A) return ff[a.B]<ff[b.B];
    return ff[a.A]<ff[b.A];
}
void DFS(int now, int b)
{
    if (b>K) return;
    int i;
    if (flag[now] == 1 && now != ye)
    {
        ans[gh].A = ye;
        ans[gh].B = now;
        ans[gh].C = b;
        gh++;
        return;
    }
    for (i = 0; i<ljb[now].size(); i++)
    {
        if (rr[ljb[now][i]] == 0)
        {
            rr[ljb[now][i]] = 1;
            DFS(ljb[now][i], b + 1);
        }
    }

}
int main()
{
    int n, i, j, o;
    while (~scanf("%d", &K))
    {
        scanf("%d", &n);
        zh.clear(); ff.clear();
        memset(flag, 0, sizeof(flag));
        int p = 1, tot; gh = 0;
        zh[774388357] = p;
        ff[p] = 774388357;
        p++;
        for (i = 0; i<100000; i++) ljb[i].clear();
        for (o = 0; o<n; o++)
        {
            scanf("%d %s", &k[o], s);
            ls = 0;
            if (zh[k[o]] == 0) zh[k[o]] = p, ff[p] = k[o], p++;
            flag[zh[k[o]]] = 1;
            int len = strlen(s);
            j = 0; tot = 0;
            for (i = 0; i <= len; i++)
            {
                if (s[i] == ‘,‘ || s[i] == ‘\0‘)
                {
                    if (zh[ls] == 0) zh[ls] = p,ff[p] = ls,p++;
                    u[tot] = zh[ls], tot++, ls = 0;
                }
                else ls = ls * 10 + s[i] - ‘0‘;
            }
            ljb[1].push_back(u[0]);
            ljb[u[0]].push_back(1);
            for (i = 1; i<tot; i++)
            {
                ljb[u[i - 1]].push_back(u[i]);
                ljb[u[i]].push_back(u[i - 1]);
            }
            ljb[u[tot - 1]].push_back(zh[k[o]]);
            ljb[zh[k[o]]].push_back(u[tot - 1]);
        }
        for (i = 0; i<n; i++)
        {
            ye = zh[k[i]];
            memset(rr, 0, sizeof(rr));
            rr[ye] = 1;
            DFS(ye, 0);
        }
        sort(ans, ans + gh, cmp);
        for (i = 0; i<gh; i++)
        {
            cout << ff[ans[i].A];
            cout << " ";
            cout << ff[ans[i].B];
            cout << " ";
            cout << ans[i].C;
            cout << endl;
        }
    }
    return 0;
}

ACdream 1728 SJY's First Task

时间: 2024-08-07 16:59:11

ACdream 1728 SJY's First Task的相关文章

【最短路】ACdream 1198 - Transformers&#39; Mission

Problem Description A group of transformers whose leader is Optimus Prime(擎天柱) were assigned a mission: to destroy all Decepticon's(霸天虎) bases. The bases are connected by roads. They must visit each base and place a bomb there. They start their missi

ACdream 1213 Matrix Multiplication【水题 、 找规律】

Matrix Multiplication Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) 链接:http://acdream.info/problem?pid=1213 Problem Description Let us consider undirected graph G = {V; E} which has N vertices and M edges. Incidence

Conductor Task Workers

由远程worker执行的conductor任务通过HTTP端点进行通信以轮询任务并更新执行状态. conductor提供了轮询任务的框架,管理执行线程并将执行状态更新回服务器.该框架提供了Java和Python中的库.可以通过使用用于任务管理的HTTP端点来添加其他语言支持. Java 实现Worker接口来实现任务.https://github.com/Netflix/conductor/blob/dev/client/src/main/java/com/netflix/conductor/c

C#,Task

1.Task.Run(); static void Main(string[] args) { long a = 9876545678, b = 987654567892; Task task = Task.Run(() => { Add(a, b); }); Console.ReadLine(); } static void Add(long a,long b) { Console.WriteLine("This is the Add method!"); Console.Wr

MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考

我们知道,MapReduce有三层调度模型,即Job-->Task-->TaskAttempt,并且: 1.通常一个Job存在多个Task,这些Task总共有Map Task和Redcue Task两种大的类型(为简化描述,Map-Only作业.JobSetup Task等复杂的情况这里不做考虑): 2.每个Task可以尝试运行1-n此,而且通常很多情况下都是1次,只有当开启了推测执行原理且存在拖后腿Task,或者Task之前执行失败时,Task才执行多次. 而TaskImpl中存在一个成员变

实现基于Task的异步模式

返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的方法都是异步方法,编译器会使用TAP执行必要的转换从而异步地实现方法.这样的方法应该返回Task或者Task<TResult>类型.在后者的案例中,方法体应该返回一个TResult,且编译器将确保通过返回的Task<TResult>是可利用的.相似地,方法体内未经处理的异常会被封送到输出的task,造成返

基础总结篇之三:Activity的task相关

古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀書示子聿(yù)> 软件行业也是一样,多少前辈不遗余力的奋斗才出现了软件行业的繁荣的景象,其中已有不少成为大师级人物.今天我们站在伟人的肩膀上,自然会有不少的优势,但不要忘了,要在对技术的认知方面有所提升,仍需我们去实践,去实践. 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式的时候,已经了解到一些关于task的技术,今天我再向大家介绍一下.task是一个具有栈结

哈理工2015暑假训练赛BNU16488 Easy Task(简单题)

A - Easy Task Time Limit:2000MS    Memory Limit:65536KB    64bit IO Format:%lld & %llu SubmitStatusPracticeZOJ 2969 Description Calculating the derivation of a polynomial is an easy task. Given a function f(x) , we use (f(x))' to denote its derivatio

Android Studio 中 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task &#39;:compileDebugAidl&#39;.的问题解答

Android Studio 中 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileDebugAidl'.的问题解答 完整的问题提示 Gradle: FAILURE:Build failed with an exception.*What went wrong:Execution failed for task ':compileDebugAidl'.>No