1.并查集求最小生成树

Code:

 #include <stdio.h>
#include <stdlib.h>
 
struct node
{
    long x,y,c;
}road[];
 
long fa[];
 
int cmp(const void *a,const void *b)
{
    if ((*(struct node *)a).c < (*(struct node *)b).c)
        return -;
    else
        return ;
}
 
long getfather(long d)
{
    if (fa[d]==d)
        return d;
    fa[d]=getfather(fa[d]);
    return fa[d];
}
 
int main()
{
    long n,m,t,xx,yy,x,y,i,cnt;
    long long cost=;
    scanf("%ld%ld",&n,&m);
    cnt=n-;
    for (i=;i<=n;i++)
        fa[i]=i;
    for (i=;i<=m;i++)
    {
        scanf("%ld%ld",&x,&y);
        xx=getfather(x);
        yy=getfather(y);
        if (xx!=yy)
        {
            fa[xx]=yy;
            cnt--;
            if (cnt==)
            {
                printf("0\n");
                return ;
            }
        }
 
    }
    scanf("%ld",&t);
    for (i=;i<t;i++)
        scanf("%ld%ld%ld",&road[i].x,&road[i].y,&road[i].c);
    qsort(road,t,sizeof(struct node),cmp);
    for (i=;i<t;i++)
    {
        xx=getfather(road[i].x);
        yy=getfather(road[i].y);
        if (xx!=yy)
        {
            fa[xx]=yy;
            cost+=road[i].c;
            cnt--;
            if (cnt==)
            {
                printf("%lld\n",cost);
                return ;
            }
        }
    }
    printf("-1\n");
    return ;
}

2.点有权值,spfa

 #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
struct node
{
    long c;
    struct node *next;
}*city[];
 
long q[],pre[],m;
 
long min(long a,long b)
{
    if (a>b)
        return b;
    else
        return a;
}
 
void print(long d)
{
    if (d!=m)
        print(pre[d]);
    printf("%ld",d);
    if (d!=)
        printf("->");
    else
        printf("\n");
}
 
int main()
{
    long i,j,s,t,b,e,n,ren,g[],head,tail,sum[];
    bool vis[];
    struct node *p;
    scanf("%ld%ld%ld",&n,&m,&ren);
    for (i=;i<=n;i++)
    {
        scanf("%ld",&g[i]);
        scanf("%ld",&s);
        for (j=;j<=s;j++)
        {
            scanf("%ld",&t);
            p=(struct node *) malloc (sizeof(struct node));
            p->c=t;
            p->next=city[i];
            city[i]=p;
        }
    }
    for (i=;i<=n;i++)
    {
        vis[i]=true;
        sum[i]=;
    }
    sum[m]=g[m];
    head=;
    tail=;
    q[]=m;
 
    do
    {
        head=(head+)%;
//        head++;
        b=q[head];
        p=city[b];
        while (p)
        {
            e=p->c;
            if (sum[b]+g[e]<sum[e])
            {
                sum[e]=sum[b]+g[e];
                pre[e]=b;
                if (vis[e])
                {
                    tail=(tail+)%;
//                    tail++;
                    q[tail]=e;
                    vis[e]=false;
                }
            }
            p=p->next;
        }
        vis[b]=true;
    }
    while (head!=tail);
 
    if (sum[]<=ren*)
    {
        print();
        printf("%ld\n",ren-sum[]/);
    }
    else
        printf("No way!");
    return ;
}

3.

地图bfs

U10278 Cx的金字塔 _ 落谷1126机器人搬重物 解题报告

I.哪个是行,哪个是列,行列从哪边开始

II.一次操作

1.前移1,2,3!步

2.转90度

III.边界范围 1~n-1 1~m-1

IV.起始点不可用

V.起始点=终止点

Code:

 #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
struct node
{
    long x,y,c,step;
}q[];
 
bool vis[][][];
 
long head,tail,s,t;
 
void add(long x,long y,long c)
{
    tail++;
    q[tail].x=x;
    q[tail].y=y;
    q[tail].c=c;
    q[tail].step=q[head].step+;
    vis[x][y][c]=false;
    if (x==s && y==t)
    {
        printf("%ld\n",q[tail].step);
        exit();
    }
}
 
int main()
{
    long n,m,i,j,k,x,y,c;
    long map[][];
    char ccs,cs;
    scanf("%ld%ld",&n,&m);
    for (i=;i<=n;i++)
        for (j=;j<=m;j++)
            for (k=;k<;k++)
                vis[i][j][k]=true;
 
    for (i=;i<=n;i++)
        for (j=;j<=m;j++)
            scanf("%ld",&map[i][j]);
    scanf("%ld%ld%ld%ld%c%c",&x,&y,&s,&t,&ccs,&cs);
 
    if (x== || x==n || y== || y==m || map[x][y]== || map[x+][y]== || map[x][y+]== || map[x+][y+]==)
    {
        printf("-1");
        return ;
    }
 
    if (x==s && y==t)
    {
        printf("0\n");
        return ;
    }
 
    head=;
    tail=;
    q[].x=x;
    q[].y=y;
    if (cs=='E')
        c=;
    else if (cs=='S')
        c=;
    else if (cs=='W')
        c=;
    else
        c=;
    q[].c=c;
    q[].step=;
    vis[x][y][c]=false;
    //上:0 下:1 左:2 右:3
    head=;
    tail=;
    do
    {
        head++;
        x=q[head].x;
        y=q[head].y;
        c=q[head].c;
        //上
        if (c==)
        {
            if (x> && map[x-][y]== && map[x-][y+]==)
            {
                if (vis[x-][y][c])
                    add(x-,y,c);
                if (x> && map[x-][y]== && map[x-][y+]==)
                {
                    if (vis[x-][y][c])
                        add(x-,y,c);
                    if (x> && map[x-][y]== && map[x-][y+]== && vis[x-][y][c])
                        add(x-,y,c);
                }
            }
        }
        //下
        else if (c==)
        {
            if (x<n- && map[x+][y]== && map[x+][y+]==)
            {
                if (vis[x+][y][c])
                    add(x+,y,c);
                if (x<n- && map[x+][y]== && map[x+][y+]==)
                {
                    if (vis[x+][y][c])
                        add(x+,y,c);
                    if (x<n- && map[x+][y]== && map[x+][y+]== && vis[x+][y][c])
                        add(x+,y,c);
                }
            }
 
        }
        //左
        else if (c==)
        {
            if (y> && map[x][y-]== && map[x+][y-]==)
            {
                if (vis[x][y-][c])
                    add(x,y-,c);
                if (y> && map[x][y-]== && map[x+][y-]==)
                {
                    if (vis[x][y-][c])
                        add(x,y-,c);
                    if (y> && map[x][y-]== && map[x+][y-]== && vis[x][y-][c])
                        add(x,y-,c);
                }
            }
        }
        //右
        else
        {
            if (y<m- && map[x][y+]== && map[x+][y+]==)
            {
                if (vis[x][y+][c])
                    add(x,y+,c);
                if (y<m- && map[x][y+]== && map[x+][y+]==)
                {
                    if (vis[x][y+][c])
                        add(x,y+,c);
                    if (y<m- && map[x][y+]== && map[x+][y+]== && vis[x][y+][c])
                        add(x,y+,c);
                }
            }
        }
        if (c== || c==)
        {
            if (vis[x][y][])
                add(x,y,);
            if (vis[x][y][])
                add(x,y,);
        }
        else
        {
            if (vis[x][y][])
                add(x,y,);
            if (vis[x][y][])
                add(x,y,);
        }
    }
    while (head<tail);
    printf("-1\n");
 
    return ;
}

4.

对于70%的数据:

2<=a<=250

对于100%的数据:

2<=a<=2^60

对于70%的数据:

初始:

现有一个花坛(A坛)装满了白蛇根草,还有两个空花坛(B坛,C坛),

三个花坛共有250*250*250=15625000种

(x,y,z)->其它状态

当有其中两个花坛的数目为|A|/2时结束

by lzu_cgb
share & spread ideas

洛谷_Cx的故事_解题报告_第四题70的更多相关文章

  1. 洛谷 P2317 [HNOI2005]星际贸易 解题报告

    P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...

  2. 洛谷 P3802 小魔女帕琪 解题报告

    P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...

  3. 洛谷 P2606 [ZJOI2010]排列计数 解题报告

    P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...

  4. 洛谷1303 A*B Problem 解题报告

    洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...

  5. 洛谷 P2466 Sue的小球 解题报告

    P2466 [SDOI2008]Sue的小球 题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当 ...

  6. 洛谷 P1310 表达式的值 解题报告

    P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. "× "运算优先于"⊕"运算,即计算表 ...

  7. 洛谷 P4292 [WC2010]重建计划 解题报告

    P4292 [WC2010]重建计划 题目描述 \(X\)国遭受了地震的重创, 导致全国的交通近乎瘫痪,重建家园的计划迫在眉睫.\(X\)国由\(N\)个城市组成, 重建小组提出,仅需建立\(N-1\ ...

  8. 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告

    [USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...

  9. 洛谷 P1379 八数码难题 解题报告

    P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初 ...

随机推荐

  1. 蒙提霍尔游戏 python 模拟

    本文使用蒙特卡罗方法验证蒙提霍尔游戏的结论. 以下代码,本人原创! 完整代码 import random # 蒙提霍尔游戏 def play_game(strategy='nonchange'): # ...

  2. 前端页面loading效果(CSS实现)

    当首页内容或图片比较多时,加载时间会比较长,此时可能出现页面白屏的情况,用户体验较差.所以,在页面完全加载出来之前,可以考虑加入loading效果,当页面完全加载完后,是loading消失即可. 1. ...

  3. Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries

    目录 上篇回顾 Building Queries 匹配所有的查询 全文查询 Full Text Queries 什么是全文查询? Match 全文查询 API 列表 基于词项的查询 Term Term ...

  4. css修改select下拉列表的默认样式

    select的一些默认样式我们很难修改,比如图标的替换.接下来就说说如何修改这些默认样式: html代码: <div> <select name=""> & ...

  5. 微信小程序在当前页面设置其他页面的数据

    如果其他页面用到的数据是 globalData, 那么直接在当前页面修改 globalData 数据即可. 如果其他页面用到的数据是 storage, 那么直接在当前页面修改 storage 数据即可 ...

  6. 自动化部署-Jenkins+SVN+MSBuild

    这篇文章主要介绍下使用Jenkins实现自动化部署 下载 https://jenkins.io/download/ 安装 按步骤安装即可,下载的是windows版本,安装完成后,会看到这样一个正在运行 ...

  7. 机器学习之线性回归使用Python和tensorflow实现

    导入依赖包 import tensorflow as tf import numpy as np import matplotlib.pylab as plt from pylab import mp ...

  8. PHP Laravel Install and Quickstart

    1.安装Laravel 一键安装包Laravel 要安装Laravel依赖的PHP7以上版本,以及php 扩展php-openssl php-pdo ... 以及Homestead github下载安 ...

  9. @Param注解的用法解析

    实例一 @Param注解单一属性 dao层示例 Public User selectUser(@param(“userName”) String name,@param(“userpassword”) ...

  10. PHP学习笔记2

    PHP Switch语句 用于根据多个不同条件执行不同动作.如果不在每个条件后加break,将会输出所有结果. <?php $language="java"; switch( ...