洛谷_Cx的故事_解题报告_第四题70
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的更多相关文章
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
- 洛谷 P3802 小魔女帕琪 解题报告
P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
- 洛谷 P2466 Sue的小球 解题报告
P2466 [SDOI2008]Sue的小球 题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当 ...
- 洛谷 P1310 表达式的值 解题报告
P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. "× "运算优先于"⊕"运算,即计算表 ...
- 洛谷 P4292 [WC2010]重建计划 解题报告
P4292 [WC2010]重建计划 题目描述 \(X\)国遭受了地震的重创, 导致全国的交通近乎瘫痪,重建家园的计划迫在眉睫.\(X\)国由\(N\)个城市组成, 重建小组提出,仅需建立\(N-1\ ...
- 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告
[USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...
- 洛谷 P1379 八数码难题 解题报告
P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初 ...
随机推荐
- 20155323刘威良《网络对抗》Exp4 恶意代码分析
20155323刘威良<网络对抗>Exp4 恶意代码分析 实践目标 1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件: ...
- angularJs 技巧总结及最佳实践
强烈建议通读官方wiki文档,里面包含了FAQ,最佳实践,深入理解最核心的Directive及Scope等文章, 基础 1. 使用ng-repeat指令,为防止重复值发生的错误.加上track by ...
- Elasticsearch date 类型详解
引言 一直对 elasticsearch 中的 date 类型认识比较模糊,而且在使用中又比较常见,这次决定多花些时间,彻底弄懂它,希望能对用到的同学提供帮助. 注意:本文测试使用是 elastics ...
- Macaca 基础原理浅析
导语 前面几篇文章介绍了在Macaca实践中的一些实用技巧与解决方案,今天简单分析一下Macaca的基础原理.这篇文章将以前面所分享的UI自动化Macaca-Java版实践心得中的demo为基础,进行 ...
- JavaScript 为什么不要使用 eval
本文内容 eval 隐藏的 eval 安全问题 结论 参考资料 eval eval 函数是一个高等级的函数,它与任何对象都无关.其参数,如果是一个字符串表达式,那么该函数计算表达式的值:如果是一个 ...
- 虚拟机virtualBox安装linux系统 xshell远程连接linux
虚拟机virtualBox安装linux系统 xshell远程连接linux 虚拟机概念: 通过软件, 使用虚拟化技术虚拟出电脑的硬件环境, 充当真实的电脑使用. 常见的虚拟软件: virtualBo ...
- Unity 图文重现官方教程视频 2droguelike 第一集
初衷: 本人初学Unity,四处收集了一些视频和教材,学习和摸索了一段时间, 我发现官网教程简单易上手,只不过他是英文讲解不方便,我就想把他翻译翻译吧, 然后我又发现看视频学习要暂停回放好多遍,麻烦, ...
- LeetCode-3.无重复字符的最长字串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- B1014. 福尔摩斯的约会
14/20 #include<bits/stdc++.h> using namespace std; map<char,string> day; int main(){ day ...
- 智能合约bug以及修改方案
截取两篇文章:第一遍文章说的是智能合约能不能修改的问题: ETC转到ETH地址以及转币进ETH智能合约账户能不能转出来? 第0章 引言 如果ETC充值到了ETH地址上,能找回来吗?答案是不一定. ET ...