NC месяц название гонки вверх

NC месяц название гонки вверх

B- дерево дочери цепь:

Название Описание
Учитывая дерево Т, каждая точка на дереве T имеет вес.
Определить размер суб-дерева в цепи: и веса всех узлов на дочерней цепи.
Вы можете найти суб-цепь по величине в дереве T и выход.
Вход Описание:
В первой строке входного н, 1≤n≤10 ^ 5.

Следующая строка содержит число п, число для каждого AI, -10 ^ 5 <= а <= 10 ^ 5, значение I представляет собой вес узла.
Тогда есть N-1 строк, каждая из которых содержит два числа U, V (1 <= и , v <= п, у! = V), указывает , что существует ребро между и и ст.
Выход Описание:
содержит только число, представляющее ответ нам нужно.
Пример 1

Входные данные
. 5
2. 3 -2 -1 -1
. 1 2
2. 3
2. 4
2. 5

Выходные
4
иллюстрируют
примеры Максимальная память прядь 1 -> 2 -> 5
Примечания:
узел может называться как цепь

пс: Я Сик гигантский ям длинного длинного типа, а не теории графов, обучение быстро нарисовать волну депозитных говорить об этом, но все равно спасибо за терпение руководства гигантского человека. (После сводной теории графов) дерева диаметра эта проблема и подобное ...

AC:


#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
typedef long long LL;
const int maxn = 1e5 + 7;
const int maxm = 2e5 + 7;
const long long mod = 1e9 + 7;
const long long INF = 0x3f3f3f3f;
LL n,a[maxn],u,v,dp[maxn],ans=-INF;
int vis[maxn];
vector<LL> G[maxn];

void dfs(LL x)
{
    vis[x] = 1; //标记该点已经走过
    LL tmp1 = a[x],tmp2 = a[x]; //tmp1为该节点最长链,tmp2为该节点次长链 
    for(int i = 0; i<G[x].size(); i++)
    {
         if(vis[G[x][i]]) //判断邻接点是否遍历过 
            continue;
         dfs(G[x][i]); //如果未遍历过就先进行遍历
         dp[x] = max(dp[x],dp[G[x][i]] + a[x]); //用dp来存当前该根节点最大权值
         if(dp[G[x][i]] + a[x] > tmp1) //判断是否新的子链大于最长子链 
         {
            tmp2 = tmp1; //将原来的最长子链变成第二长子链
            tmp1 = dp[G[x][i]] + a[x]; 
         } 
         else if(dp[G[x][i]] + a[x] > tmp2) //判断是否新的子链大于次长子链而不是最长子链
            tmp2 = dp[G[x][i]] + a[x]; //更新次长子链 
    } 
    dp[x] = tmp1; //仅有一一个子节点 
    ans = max(ans,tmp1 + tmp2 -a[x]);//最长子链 + 次长子链 - 当前节点权值 
}

int main()
{
    scanf("%lld",&n);
    for(int i = 1; i <= n; i++)
        scanf("%lld",&a[i]);
    for(int i = 1; i < n; i++)
    {
        scanf("%lld%lld",&u,&v);
        G[u].push_back(v); //用邻接表的方式存图 
        G[v].push_back(u);
    }
    memset(vis,0,sizeof(vis));
    dfs(1); //从第一个点开始遍历整个图 
    printf("%lld",ans);
    return 0;
}

D- коллекция бумаги:

Название Описание
После того, как мы помещаем в комнату , смоделированный в соответствии с декартовой системой координат, каждая точка будет иметь координаты.
Предположим теперь вмещать несколько кусочков бумаги , которые должны быть собраны, вы собираете кусочки бумаги вы должны вернуться в исходное положение, необходимо разработать стратегию , чтобы сделать кратчайший пешком сам.
Вы можете двигаться только вдоль оси х или у-осей направления от положения (I, J) перемещается в положение , смежное (I + 1, J), (I-1, J), (I, J + 1) или ( I, J-1) увеличение расстояния.

Входные данные Описание:
дан Т в первом ряду, 1≤T≤10, представляет число тестовых примеров.
Для каждого входа, учитывая размер комнаты в первом ряду, второй ряд дает начальное положение.
Далее дается натуральное число п, количество листов Представитель 1≤n≤10.
Далее п линии ординат представляет собой положение листа бумаги.
Обеспечить комнату меньше 20 × 20, бумажный лист находится в пределах определенного помещения.
Описание Вывод:
Для каждого входного и выходного строки ответа.
См пример формата.
Пример 1.
Входной

. 1
10 10
. 1. 1
. 4
2. 3
. 5. 5
. 9. 4
. 6. 5
Выход

Кратчайший путь имеет длину 24

AC:


#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stdlib.h>
#include<string.h>
#include<math.h>
using namespace std;
typedef long long LL;
const int maxn=1e5+7;
const int maxm=2e5+7;
const int num=15;
const long long mod=1e9+7;
const long long INF=0x3f3f3f3f;
int minLen=INF;
int a,b,n;
int r,c,t;
int vis[num];
struct node
{
    int x,y;    
}pos[num];


void dfs(int x,int y,int nn,int step)
{
    if(!nn)
    {
        step+=abs(x-r)+abs(y-c);
        minLen=min(minLen,step);
        return;
    }
    for(int k=1;k<=n;k++)
    {
        int xx=pos[k].x;
        int yy=pos[k].y;
        if(!vis[k])
        {
            step+=abs(xx-x)+abs(yy-y);
            vis[k]=1;
            dfs(xx,yy,nn-1,step);
            step-=abs(xx-x)+abs(yy-y);
            vis[k]=0;
        }
    }
}

int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d%d",&a,&b,&r,&c,&n);
        for(int i=1;i<=n;i++)
            scanf("%d%d",&pos[i].x,&pos[i].y);
        memset(vis,0,sizeof(vis));
        dfs(r,c,n,0);
        if(minLen<INF)
            printf("The shortest path has length %d\n",minLen);
        else
            printf("-1\n");
    }
    return 0;
}

E- коробка окраски (водные проблемы)

Описание Название
прямоугольной области разделено на небольшие квадраты для п строк и т столбцов, начальный эти коробки не окрашивается.
Для того , чтобы сделать прямоугольник появляется не один цвета, теперь уже выбранная строка г и столбца С решеткой сетки выбирается цвета.
Заполните , пожалуйста , расчет цвета, количество решетки неокрашенными.
Вход Описание:
несколько наборов входных
каждый набор из четырех цифровых входов приведены в строке N, M, R, C, указанное в заголовке значения , как показано на рисунке.
Убедитесь , что данные 1 <= п, т <= 10 ^ 6, 1 <= г <= п, 1 <= с <= м.
Выход Описание:
каждая входная и выходная строка для ответа.
Пример 1.
Входной
5523

Выход
6

AC:

#include<bits/stdc++.h>
using namespace std;
long long n,m,r,c;
int main()
{
    while(~scanf("%lld%lld%lld%lld",&n,&m,&r,&c))
    {
         printf("%lld\n",n*m-m*r-n*c+r*c);   
    }
    return 0;
}

F- мультипликативный цифровой (или название, вода)

Описание Название
мы знаем , что число больше 1, умножается на число больше , чем другой будет больше , чем произведение любого одного множителя.
Теперь даны два числа п, d, можно вычислить п раз умножая результат на 100. д.
Вход Описание:
несколько наборов входных
каждый входной линии в заданном N, D, 1≤n, d≤100.
Выход Описание:
входной и выходной строки для каждого ответа.
Пример 1
вход
. 5 : 1
. 11 1
85 2

Выход
500
1100
850000, Китай

AC:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<math.h>
using namespace std;
typedef long long LL;
const int maxn=1e5+7;
const int maxm=2e5+7;
const long long inf=0x3f3f3f3f;
const long long mod=1e9+7;
string n;
char a='0';
int d;
int main()
{
    while(cin>>n>>d)
    {
        for(int i=0;i<d;i++)
        {
            n=n+a;  
            n=n+a;
        }
    cout<<n<<endl;
    }
    return 0;
}


//题解:

#include <bits/stdc++.h>
 
using namespace std;
 
int main(){
    int n, d;
    while (cin >> n >> d){
        cout << n;
        for (int i = 1;i <= d; cout << "00", i++);
        cout << endl;
    }
    return 0;
}

G- склад место (насилие перечисление)

Название:
Крупный рогатый скот был в состоянии иметь фиксированный спрос в маленьком городке, в целях экономии расходы на пересылку, он решил построить склад в маленьком городке, но он не знал , где нужно выбрать, вы можете минимизировать затраты.
Дает тхп матрицу, представляющее число раз каждый год, маленький городок положения товаров спроса. Мы проводим как определено дальнобойщик грузового транспорта, грузовики могут передвигаться только по горизонтали или вертикали.

Входные данные Описание:
первые входы Т, T≤10, тест представительных данных о количестве групп в строке.
Каждый набор из двух положительных целых п ввода приведен в первой строке, м, 1≤n, m≤100, представляющий ширину и высоту матрицы.
Следующие м линия п-го числа не более 1000, в имени матричных элементов.
Выход Описание:
каждая выходная строка ввода ответа.
Пример 1
Ввод
. 3
2 2
1 1
1 0
. 4. 4
0. 8 2 0
1. 4. 5 0
0 1 0 1
. 3. 9 2 0
. 6. 7
0 0 0 0 0 0
0 1 0 3 0 1
2 9 1 2 1 2
. 8. 7 . 3. 1. 4. 3
. 1. 7. 7 2 2 0
0 0 1 1 0 0
0 0 0 0 0 0

Выход
2
55
162

Примечание:
срок поставки может быть только один транспортом, если положение требует три раза, грузовик должен работать в три раза.
Даже если позиция должна быть поставка, мы можем выбрать это место как склад.

AC:

//O(n^2 * m^2)也能过...
#include<bits/stdc++.h>
using namespace std;
const int num=105;
int maze[num][num];
int t,n,m,ans;
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        ans=0x3f3f3f3f;
        scanf("%d%d",&m,&n);
        for(int i = 1;i <= n;i++)
            for(int j = 1;j <= m;j++)
                scanf("%d",&maze[i][j]);
        for(int x = 1;x <= n;x++)
        {
            for(int y = 1;y <= m;y++)
            {
                int sum = 0;
                for(int i = 1;i <= n;i++)
                {
                    for(int j = 1;j <= m;j++)
                    {
                        sum += (abs(x - i) + abs(y - j)) * maze[i][j];
                    }
                }
                ans = min(sum,ans);
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

Как и остальные медленно приходят ~ ~ ~

рекомендация

отwww.cnblogs.com/K2MnO4/p/12359765.html