当前位置: 首页 > news >正文

网站开发方案书博客网站建设一流公司

网站开发方案书博客,网站建设一流公司,专业做动漫的网站,书籍封面设计网站[CCO 2019] Sirtetdescriptionsolutioncodedescription 题目链接 solution 很巧妙地将差分约束隐藏起来 问题的关键在于求出每一个sand停止运动的时间#xff0c;这样很容易填涂出最后的答案#xff08;向下平移即可#xff09; 不妨设 ti,jt_{i,j}ti,j​ 表示 (i,j)(i… [CCO 2019] Sirtetdescriptionsolutioncodedescription 题目链接 solution 很巧妙地将差分约束隐藏起来 问题的关键在于求出每一个sand停止运动的时间这样很容易填涂出最后的答案向下平移即可 不妨设 ti,jt_{i,j}ti,j​ 表示 (i,j)(i,j)(i,j) 位置上的 sand\text{sand}sand 停止运动的时间 如果 (i1,j1)(i_1,j_1)(i1​,j1​) 和 (i2,j2)(i_2,j_2)(i2​,j2​) 的 sand\text{sand}sand 是连在一起的则 ti1,j1ti2,j2t_{i_1,j_1}t_{i_2,j_2}ti1​,j1​​ti2​,j2​​ 转化成差分约束的形式即 ti1,j1−ti2,j2≤0,ti2,j2−ti1,j1≤0t_{i_1,j_1}-t_{i_2,j_2}\le 0,t_{i_2,j_2}-t_{i_1,j_1}\le 0ti1​,j1​​−ti2​,j2​​≤0,ti2​,j2​​−ti1​,j1​​≤0 显然这是具有传递性的【在代码实现中我选择了同一连通块缩点的方法利用并查集】 如果 (i1,j1)(i_1,j_1)(i1​,j1​) 和 (i2,j2)(i_2,j_2)(i2​,j2​) 的 sand\text{sand}sand 不是连在一起的显然只有 j1j2j_1j_2j1​j2​ 【同一列】的 sand\text{sand}sand 会相互影响 假设 i1i2i_1i_2i1​i2​ 显然最多经过 i2−i1−1i_2-i_1-1i2​−i1​−1 的时间后就一定会碰上【可能i1i_1i1​所属的连通块的某个 sand\text{sand}sand 会与其余连通块先撞上】即 ti1,j1−ti2,j2≤i2−i1−1t_{i_1,j_1}-t_{i_2,j_2}\le i_2-i_1-1ti1​,j1​​−ti2​,j2​​≤i2​−i1​−1 注意同一列只需要相邻的两个不同连通块的 sand\text{sand}sand 进行连边【具有传递性】且最下面的 sand\text{sand}sand 与空【定义为000】的距离为 n−in-in−i 最后求不同连通块之间的最短路即可 code #include queue #include cstdio #include vector using namespace std; #define maxn 1000005 #define Pair pair int, int priority_queue Pair, vector Pair , greater Pair q; vector Pair G[maxn]; int n, m; char **ch, **ans; int *lst; int dis[maxn], f[maxn]; bool vis[maxn];int find( int x ) { return f[x] x ? x : f[x] find( f[x] ); }void merge( int u, int v ) {u find( u ), v find( v );if( u v ) return;else f[v] u; }void addedge( int u, int v, int w ) { u find( u ), v find( v );G[u].push_back( { v, w } ); }int id( int x, int y ) { return ( x - 1 ) * m y; }int main() {scanf( %d %d, n, m );ch new char * [n 5];lst new int [m 5];for( int i 1;i n;i ) {ch[i] new char[m 5];scanf( %s, ch[i] 1 );}for( int i 1;i n * m;i ) f[i] i;for( int i 1;i n;i ) {for( int j 1;j m;j ) {lst[j] 0; if( ch[i][j] # ) {if( i 1 and ch[i - 1][j] # ) merge( id( i, j ), id( i - 1, j ) );if( i n and ch[i 1][j] # )merge( id( i, j ), id( i 1, j ) );if( j 1 and ch[i][j - 1] # )merge( id( i, j ), id( i, j - 1 ) );if( j m and ch[i][j 1] # )merge( id( i, j ), id( i, j 1 ) );}}}for( int i 1;i n;i )for( int j 1;j m;j )if( ch[i][j] # ) {if( lst[j] ) addedge( id( i, j ), id( lst[j], j ), i - lst[j] - 1 );lst[j] i;}for( int i 1;i m;i ) if( lst[i] ) addedge( 0, id( lst[i], i ), n - lst[i] );for( int i 1;i n * m;i ) dis[i] 0x3f3f3f3f;q.push( { 0, 0 } );while( ! q.empty() ) {int u q.top().second; q.pop();if( vis[u] ) continue;vis[u] 1;for( int i 0;i G[u].size();i ) {int v G[u][i].first, w G[u][i].second;if( dis[v] dis[u] w ) {dis[v] dis[u] w;q.push( { dis[v], v } );}}}ans new char * [n 5];for( int i 1;i n;i ) {ans[i] new char [m 5];for( int j 1;j m;j ) ans[i][j] .;}for( int i 1;i n;i )for( int j 1;j m;j )if( ch[i][j] # ) ans[i dis[find( id( i, j ) )]][j] #;for( int i 1;i n;i ) {for( int j 1;j m;j )printf( %c, ans[i][j] );printf( \n );}return 0; }
http://www.ihoyoo.com/news/26757.html

相关文章:

  • 合肥网站优化价格西部数码网站管理控制面板
  • 广州网捷网站建设技术有限公司wordpress 文章 页面
  • 网站建设合作协议文本简单网页代码html作业
  • 手机号网站源码网站制作1
  • 鼓楼微网站开发建设公共网站的手续
  • 科技网站内容设计用360云盘做网站
  • 报网站开发培训班网站建设考题
  • 找室内效果图的网站txt免费全本电子书软件下载网站
  • 成品网站w灬 源码1688网页精准拓客营销系统
  • 绵阳网站建设 小程序徐州建设网站公司
  • 做网站多少钱大概提高wordpress网站
  • 中小企业建站系统网店推广的作用是什么
  • 怎么上传网站到空间域名是什么有什么用
  • 网站建设学什么书抖音广告投放 网页制作教程
  • 网站建设服务器 几核买奢侈品代工厂做的产品的网站名
  • 山东兴润建设有限公司网站新乡哪里做网站
  • 外包网站开发安全吗宝塔面板WordPress优化
  • 海南建设银行官网招聘网站个人网站收款接口
  • 湖南建设集团网站百度ai智能写作工具
  • 郴州网站制作公司地址摩托车网站建设
  • 网站查询空间商长春建网站一般多少钱
  • 虚拟技术对网站建设维护的影响怎么看网站有没有做推广
  • 柳州住房和城乡建设厅网站城市建设规划网站
  • 琼海网站建设公司ps网站设计概述
  • 免费行情软件网站大全网页版wordpress边框
  • 做性视频网站有哪些内容网络编程课程
  • 广元 网站建设怎么免费构建自己的网站
  • 摄影网站都有什么受欢迎的手机网站建设
  • 网站默认图片asp.net网站项目建设
  • 网站仿造wordpress 页面 菜单