1.白银莲花池

LUOGU 2411

第一种思路:当然我们可以写三个bfs a掉这个题,这写下来一二百行要有了吧;

第二种:我们可以在一个bfs中维护所有的信息,一个方向数组,从起点开始,向八个方向扩展,如果添加的莲花需要少,就更新当前的值,如果添加莲花一样多但所需步数更少,也更新,目标点方案数等于当前点方案数。特别地,如果添加莲花和步数一样多,目标点方案数加上当前点方案数。以上三种情况目标点皆需入队;

int add[50][50],bs[50][50],vis[50][50],sx,sy,tx,ty,n,m,w[500][500];
long long ans,c,hl[500][500];//add数组表示需要添加莲花的最小值,bs表示需要的最小步数,hl表示方案数;

#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;
}
int dx[]={-,-,,,,,-,-};
int dy[]={,,,,-,-,-,-};
int add[][],bs[][],vis[][],sx,sy,tx,ty,n,m,w[][];
long long ans,c,hl[][];
queue<pii>q;
int main()
{
//freopen("silvlily.in","r",stdin);
//freopen("silvlily.out","w",stdout);
m=read();n=read();
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
{
w[i][j]=read();
if(w[i][j]==) tx=i,ty=j;
if(w[i][j]==)
{
q.push(make_pair(i,j));
vis[i][j]=;
hl[i][j]=;
//sx=i,sy=j;
}
else add[i][j]=1e9,bs[i][j]=1e9;
}
int a,b,x,y,flag;
while(q.size())
{
x=q.front().first,y=q.front().second;
q.pop();
vis[x][y]=;
a=add[x][y],b=bs[x][y],c=hl[x][y];
for(int i=;i<;i++)
{
int xx=x+dx[i],yy=y+dy[i],flag=;
if(xx<||xx>m||yy<||yy>n||w[xx][yy]==||a>add[xx][yy]) continue;
if(w[xx][yy])
{
if(a<add[xx][yy]||b+<bs[xx][yy])
add[xx][yy]=a,bs[xx][yy]=b+,hl[xx][yy]=c,flag=;
else if(b+==bs[xx][yy]) hl[xx][yy]+=c,flag=;
}
else if(a+<add[xx][yy]||(a+==add[xx][yy]&&b+<bs[xx][yy]))
add[xx][yy]=a+,bs[xx][yy]=b+,hl[xx][yy]=c,flag=;
else if(a+==add[xx][yy]&&b+==bs[xx][yy])
hl[xx][yy]+=c,flag=;
if(flag&&!vis[xx][yy]&&(xx!=tx||yy!=ty))
q.push(make_pair(xx,yy)),vis[xx][yy]=;
}
}
//cout<<hl[tx][ty]<<endl;
if(add[tx][ty]==1e9)
{
cout<<"-1"<<endl;
return ;
}
else cout<<add[tx][ty]<<endl<<bs[tx][ty]<<endl<<hl[tx][ty]<<endl;
return ;
}

2.跳楼机

LUOGU 3403

写这个题有点难受,读错题了然后考虑当只有x,y是以为是组合数,我哭辽...

又有点像背包 1e18 呵呵,放弃,但再仔细想想,这个题和墨墨的等式有点像啊,墨墨的题解

在老师的指引下,我们可以列出公式ans+=(h-i*x)/y;;

我们将x作为最后的拓展,我们相当于分成modx成x种情况进行分类,同余建图 对于每一个同余类,我们只需要找到在当前情况下的最低点,那么每次累加x便能再次向上跳,(h-d[i])/x便会得到最后的结果,+1是因为在执行除法时我们讲最低点的情况舍去了;

表示通过y,z两个操作可以到达的 mod x=i最小的楼层;

可以得知:d[i+y]=d[i]+y,d[i+z]=d[i]+z.

洛谷这个题解感觉很棒:https://fengzi8615.blog.luogu.org/solution-p3403

令f(i)表示表示仅通过操作2和操作3能到达的 modx == i 的最小楼层

很容易得出状态转移方程

f(i+y)=f(i)+y f(i+z)=f(i)+z

能到达mod x=i+y的最小楼层
即在能到达mod x=i的最小楼层的基础上,再执行一遍操作2

我们来看看最短路的求法 f(y)=f(x)+edge(i)

y是子结点,x是父节点,edge表示权值
这个写法跟我们上面的转移方程很像诶
于是考虑让(i+y)和(i+z)成为点;
让y,z成为权值从而算出f(i);

ans+=(h-f[i])/x +1

由于f(i)是在不适用操作1的情况下
所以h和f(i)之间的差值由操作1来完成
而每进行操一次作1,我们就可以到达一个新的楼层
所以答案就要累加上进行操作1的次数

即 (h-f[i])/x +1 为什么要+1呢 因为除法是向下取整,注意由于f数组的存在,是不可能出现刚好被整除的,这一点请自己思考;

3.中山市选【生成树】

LUOGU 4821

画图,原图4n个点,5n条边,对于生成树n个点n-1条边,但本题还有每个五边形都有中间n边形重叠一条边;

去掉n边形中的任意一条边,有n种做法,此时肯定有一个五边形和残余的n边形形成一个新环;

我们需要在新环上再去掉一条边,然后按照思考过程对剩下的n-1个五边形去边,有5^(n-1)种方案,所以乘起来就得到ans=4 5^(n-1);

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=;
template<typename T>inline void read(T &x)
{
x=;T f=,ch=getchar();
while(!isdigit(ch)) ch=getchar();
if(ch=='-') f=-, ch=getchar();
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^), ch=getchar();
x*=f;
}
inline ll Quick_mul(ll x,ll y)
{
return((x*y-(ll)(((long double)x*y+0.5)/mod)*mod)%mod+mod)%mod;
}
inline ll Quick_power(ll a,ll b)
{
ll ans=;
while(b)
{
if(b&) ans=Quick_mul(ans,a);
a=Quick_mul(a,a);
b>>=;
}
return ans;
}
int main()
{
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
int t;
read(t);
while(t--)
{
int n;
read(n);
if(n==) puts("");
else
{
ll ans=Quick_power(,n-);
printf("%lld\n",ans*n*%mod);
}
}
return ;
}

D9 图论综合题的更多相关文章

  1. 3. 关于sql注入的综合题

    关于sql注入的综合题                          ----------南京邮电大学ctf : http://cms.nuptzj.cn/ 页面上也给了好多信息: 根据这个sm. ...

  2. 11.07图论水题Test

    11.07图论水题Test 题目 描述 做法 \(BSOJ6378\) 在\(i\)位置可以到\(i+a_i\)或\(i+b_i\)求\(1\rightarrow n\)字典序最小路径 判可达性后贪心 ...

  3. HDU 3726 Graph and Queries 平衡树+前向星+并查集+离线操作+逆向思维 数据结构大综合题

    Graph and Queries Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  5. 山东省济南市历城第二中学——洛谷图论入门题--基本题必做 图的遍历—3.骑马修栅栏(fence)

    由于我这个破题提交了十四五遍,所以我决定写篇博客来记录一下. 这个题的题目描述是这样的 首先一看这个题我瞬间就想到了一笔画问题(欧拉回路). 对于能够一笔画的图,我们有以下两个定理. 定理1:存在欧拉 ...

  6. 专题:CF图论杂题

    题目是来自HZW的博客(构造题我是各种不会...) Solved 1 / 1 A CodeForces 500A New Year Transportation Solved 1 / 1 B Code ...

  7. bzoj5109(图论好题)

    我的参考题解:https://www.cnblogs.com/ccz181078/p/7907022.html: 不过我感觉题解的压位有问题,(1<<x)还不炸上天.不过这题数据水,好像怎 ...

  8. 【MySQL】一道MySQL综合题

    题:下表是一张商品出售统计表,写一段简单的sql查询,查询出每种商品类型每个月的出售总额,其中类型1为实体商品,类型2为虚拟商品.表名goods_count. id(自增id) sold_time(出 ...

  9. CG-CTF 南邮 综合题2

    个人网站 http://www.wjlshare.tk 0x00前言 主要考了三块 第一块是文件包含获取源码 第二块是通过sql绕过注入获取密码 第三块是三参数回调后门的利用 做这题的时候结合了别人的 ...

随机推荐

  1. hadoop 学习笔记(第三章 Hadoop分布式文件系统 )

    map->shuffle->reduce map(k1,v1)--->(k2,v2) reduce(k2,List<v2>)--->(k2,v3) 传输类型:org ...

  2. Jmeter-----参数配置

    参数化配置: 设置为3个线程后,三个用户均能运行

  3. instrument之Xcode Analyze 代码静态检查及问题解决

    Static Code Analysis(静态代码分析)用来发现源代码潜在的错误与缺陷,源代码编译后只有在运行时有可能会产生细微的错误,他们可能难以识别和修复,所以这些潜在的威胁在开发过程中一定要尽可 ...

  4. Github 入门(“趣考网络”学习第一步)

    目录 为什么要使用GitHub 下载Github Desktop fork 与 pull request git pull,fetch,merge,push的区别与联系 git clone 与 dow ...

  5. Install Superset from Python3.6

    本文安装Superset大致分为以下部分: 在操作系统中安装相关依赖,我所用的操作系统为Centos6.5 安装Python3.6.6 安装Superset 详细步骤如下: 相关依赖的安装 yum i ...

  6. 《图解HTTP》读书笔记(四:HTTP方法)

    1.作用 告知服务器我的意图是什么使用以下方法下达命令. 2.方法 GET 方法用来请求访问已被 URI 识别的资源. 指定的资源经服务器端解析后返回响应内容. ---URI可以定位互联网上的资源 P ...

  7. webapi发布到windows 2012的iis8里 出错

    HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容. 选一个.net版本一致的应用程序池 即可

  8. 2019春第八周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能更加进一步的够熟练掌握指针的用法 这个作业在那个具体方面帮助我实现目标 指针对于高阶题目的做法 参考文献与 ...

  9. 【Idea】-NO.162.Idea.1 -【Idea Unable to import maven project: See logs for details】

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  10. Linux下Netty实现高性能UDP服务(SO_REUSEPORT)

    参考: https://www.jianshu.com/p/61df929aa98b SO_REUSEPORT学习笔记:http://www.blogjava.net/yongboy/archive/ ...