CodeForces 34D Road Map

给出每个点的父节点,存下来。

再从r2开始,dfs到r1,把这条路径上的所有结点的父节点改变方向就可以了。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
#pragma comment(linker, "/STACK:16777216")
#define eps 1e-6
#define ll long long
using namespace std;

int f[50010],r1,r2;
void dfs(int a,int last)
{
    if(a==r1)
    {
        f[a]=last;
        return ;
    }
    dfs(f[a],a);
    f[a]=last;
}

int main()
{
    int n,i;
    while(~scanf("%d%d%d",&n,&r1,&r2))
    {
        for(i=1;i<=n;i++)
        {
            if(i==r1)
            {
                f[i]=r1;
                continue;
            }
            scanf("%d",&f[i]);
        }
        dfs(r2,r2);
        int flag=0;
        for(i=1;i<=n;i++)
        {
            if(i==r2) continue;
            if(flag) putchar(' ');
            else flag=1;
            printf("%d",f[i]);
        }
        puts("");
    }
    return 0;
}
时间: 2024-09-29 03:20:40

CodeForces 34D Road Map的相关文章

CodeForces 543d Road Improvement

Road Improvement Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Original ID: 543D64-bit integer IO format: %I64d      Java class name: (Any) The country has n cities and n - 1 bidirectional roads, it is possible

Codeforces 2A Winner (map运用)

Winner Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on CodeForces. Original ID: 2A 64-bit integer IO format: %I64d      Java class name: (Any) Prev Submit Status Statistics Discuss Next Type: None None Graph Theory      2-SAT 

Codeforces 729C Road to Cinema(二分)

题目链接 http://codeforces.com/problemset/problem/729/C 题意:n个价格c[i],油量v[i]的汽车,求最便宜的一辆使得能在t时间内到达s,路途中有k个位置在g[i]的加油站,可以免费加满油,且不耗时间.每辆车有两种运行模式可以随时切换:1.每米一分钟两升油:2.每米两分钟一升油. 看到10^5次加上循环两次就想到二分或者线段树或者看错题意了. 这题二分查找一下汽油就可以了,找到最少多少汽油够到达,然后再for一遍找汽油量大的且价格便宜的车即可. 还

Codeforces 543D Road Improvement 树形dp

题目链接:点击打开链接 题意: 给定n个点的树 问: 对于以i为根时,把树边黑白染色,使得任意点走到根的路径上不超过一条黑边,输出染色的方案数(mod 1e9+7) 思路: 显然i点的方案数 = i为根的子树的方案数 * 不包括i为根的子树的部分的方案数 首先以i为根的子树求一个方案数down[i]:for all son vj  of i, down[i] = multiply down[j] 求不包括i子树的时候为了避免除法,对儿子的方案数求一个前缀积和后缀积即可 避免了使用逆元 #incl

CodeForces 738C Road to Cinema

二分答案. 油量越多,显然通过的时间越少.可以二分找到最小的油量,可以在$t$时间内到达电影院. 一个油箱容量为v的车通过长度为L的路程需要的最小时间为$max(L,3*L-v)$.计算过程如下: 假设普通速度运行了距离$a$,加速运行了距离$b$,则$a+b=L$,即$b=L-a$. 因为$a+2*b≤v$,所以$a≥2*L-v$.所花时间为$2*a+b≥3*L-v$,因为最小需要$L$的时间,所以取个$max$.按照$max(L,3*L-v)$一段一段加起来验证就可以了. #pragma c

概率论学习小结(road map)

在最近学习模式识别和机器学习时经常会用到概率论的知识,索性重新复习一遍概率论的知识.学习概率论最重要的一点不是公式的记忆,而是对公式背后的含义的理解.(其实学习任何一门知识都是如此,但是相比高数等的抽象性来说,概率可能显得更"接地气") 曾经在大学时代数学中学的最差的一门课便是概率论,然而最近的学习中,在几经挣扎之后却渐渐找到了这门课的乐趣,在本科时候学习的那个小小的课本将概率论的趣味完全遮盖住了. 学习概率论首先要明白这门课的意义.概率论顾名思义是研究事件发生的可能性的学科,这里不使

Codeforces 543D Road Improvement(树形DP+乘法逆元)

题目大概说给一棵树,树的边一开始都是损坏的,要修复一些边,修复完后要满足各个点到根的路径上最多只有一条坏的边,现在以各个点为根分别求出修复边的方案数,其结果模1000000007. 不难联想到这题和HDU2196是一种类型的树形DP,因为它们都要分别求各个点的答案.然后解法也不难想: dp0[u]表示只考虑以u结点为根的子树的方案数 dp1[u]表示u结点往上走,倒过来,以它父亲为根那部分的方案数 有了这两部分的结果,对于各个点u的答案就是dp0[u]*(dp1[u]+1).这两部分求法如下,画

Codeforces 543D Road Improvement(DP)

题目链接 Solution 比较明显的树形DP模型. 首先可以先用一次DFS求出以1为根时,sum[i](以i为子树的根时,满足要求的子树的个数). 考虑将根从i变换到它的儿子j时,sum[i]产生的变化. 在变化前sum[i]不为0时,可以用求逆元的方法求出新的sum[i]. sum[i]为0时,就需要遍历i的新的儿子. 官方的题解给出了一个比较好的做法是预处理i的儿子的前缀积,和后缀积.使用的时候只要去除相应的儿子. #include <bits/stdc++.h> #define LL

[Codeforces 721E]Road to Home

题目大意:有一条长为l的公路(可看为数轴),n盏路灯,每盏路灯有照射区间且互不重叠,有个人要走过这条公路,他只敢在路灯照射的地方唱歌,固定走p唱完一首歌,歌曲必须连续唱否则就要至少走t才能继续唱.问你最多能唱几首歌? 解题思路:一道dp的题目. 首先有一个结论:对于一段区间,你能唱几首歌就唱几首歌. 因为如果你少唱一首歌,在下个区间最多也就多唱一首歌,与你在前面唱这首歌是一样的. 所以我们设f[i]表示前i个区间最多唱的歌的数量,g[i]表示在f[i]的前提下,最早的停止唱歌的位置. 很显然有$