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. Educational Codeforces Round 41 (Rated for Div. 2)(A~D)

    由于之前打过了这场比赛的E题,而后面两道题太难,所以就手速半个多小时A了前4题. 就当练手速吧,不过今天除了C题数组开小了以外都是1A A Tetris 题意的抽象解释可以在Luogu里看一下(话说现 ...

  2. BYTE数组与16进制字符串互转

    //字节数组转换为HEX 字符串const string Byte2HexString(const unsigned char* input, const int datasize) { ]; ; j ...

  3. Django高并发负载均衡

    1 什么是负载均衡? 当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能.那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台 ...

  4. Mvc4_mvc4跟mysql语法

    mvc4: 子页面:@section A{} 母页面:@RenderSection("A",false) false:别的页面没有定义为A的Section的话 也没事,layout ...

  5. 阿里云配置ssl证书

    一.申请证书和下载证书(阿里云申请) 二.在nginx服务器上配置ssl证书 1.检查服务器是否安装openssl 2.在nginx conf 文件夹创建 cret 文件,放置证书 [root@web ...

  6. Stm32l151+mpu6050+uart读取数据调试

    新近买了一个MPU6050模块,如上图,这个模块上的三块黑色分别是:稳压芯片662K,STM8s003f3p6,MPU6050. 根据此模块的说明书,可以使用USB转TTL将模块与上位机连接,通过卖家 ...

  7. mysql 查询所有子节点的相关数据

    定义一个函数 ) CHARSET utf8 BEGIN ); ); SET sTemp = '$'; SET sTempChd =cast(rootId as CHAR); WHILE sTempCh ...

  8. 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC-1000029000 1.冯诺依曼体系结 ...

  9. 第一个Sprint冲刺总结(事后诸葛亮及团队贡献分)

    第一个Sprint冲刺总结(事后诸葛亮及团队贡献分)   组员:欧其锋 廖焯燊 林海信 何武鹏 第一阶段的最终燃尽图如下: 2.事后诸葛亮: 3.团队贡献分: 欧其锋:22 林海信:21 何武鹏:19 ...

  10. jsp数据库开发

    完全卸载mysql数据库图文教程 https://jingyan.baidu.com/article/f96699bbaa8fc1894f3c1b5a.html MySQl:123456 JDBC概述 ...