题目分析:

给所有边按A排序,依次加入再按B递增排序,势能分析可以发现是O(n^4)的

代码:

#include<bits/stdc++.h>
using namespace std; const int maxn = ;
const int maxm = ; int n,cl,dfn[maxn],low[maxn];
struct edge{int u,v,w1,w2;}edges[maxm];
vector <int> g[maxn];
int cmp(edge alpha,edge beta){return alpha.w1 < beta.w1;} set<pair<int,pair<int,int> > > st; void Tarjan(int now){
low[now] = dfn[now] = ++cl;
for(int i=;i<g[now].size();i++){
int t = g[now][i];
if(dfn[t]) low[now] = min(low[now],dfn[t]);
else{Tarjan(t); low[now] = min(low[now],low[t]);}
}
} int chk(){// to check if it is Strong Connect Graph
cl = ;
for(int i=;i<=n;i++) low[i] = dfn[i] = ;
Tarjan();
for(int i=;i<=n;i++) if(low[i] == dfn[i]) return ;
return ;
} void read(){
scanf("%d",&n);
for(int i=;i<=n;i++) for(int j=;j<=n;j++){
int x; scanf("%d",&x);
edges[n*(i-)+j]=(edge){i,j,x,};
}
for(int i=;i<=n;i++) for(int j=;j<=n;j++) {
int x; scanf("%d",&x);
edges[n*(i-)+j].w2 = x;
}
sort(edges+,edges+n*n+,cmp);
} void work(){
int ans = 2e9;
int flag = ,lstans = ;
for(int i=;i<=n*n;i++){
if(edges[i].u == edges[i].v) continue;
int bb = edges[i].w1;
if(flag&&lstans < edges[i].w2) continue;
st.insert(make_pair(edges[i].w2,make_pair(edges[i].u,edges[i].v)));
g[edges[i].u].push_back(edges[i].v);
if(!flag){
if(chk()){
set<pair<int,pair<int,int> > >::iterator it = st.end();
it--;
lstans = (*it).first;
flag = ;
ans = min(ans,lstans+bb);
}
continue;
}
while(true){
set<pair<int,pair<int,int> > >::iterator it = st.end();
it--;int u = (*it).second.first,v = (*it).second.second;
for(int i=;i<g[u].size();i++){
if(g[u][i] == v){
swap(g[u][i],g[u][g[u].size()-]);
g[u].pop_back();
break;
}
}
if(chk()){
st.erase(it);
}else {g[u].push_back(v);break;}
}
set<pair<int,pair<int,int> > >::iterator it = st.end();
it--;lstans = (*it).first;
ans = min(ans,(*it).first+bb);
}
printf("%d\n",ans);
} int main(){
read();
work();
return ;
}

BZOJ4643 卡常大水题 【Tarjan】的更多相关文章

  1. BZOJ4643 : 卡常大水题

    将边按权值$A$从小到大排序,从小到大枚举$\max(A)$,然后双指针从大到小枚举$\max(B)$. 按权值$B$用大根堆维护所有已经加入的边,每次$\max(B)$减少时,不断取出权值$B$最大 ...

  2. bzoj5210最大连通子块和 (动态dp+卡常好题)

    卡了一晚上,经历了被卡空间,被卡T,被卡数组等一堆惨惨的事情之后,终于在各位大爹的帮助下过了这个题qwqqq (全网都没有用矩阵转移的动态dp,让我很慌张) 首先,我们先考虑一个比较基础的\(dp\) ...

  3. NOIP模拟测试39,思维禁锢专场「工业题·玄学题·卡常题」

    工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define ...

  4. Codeforces 986D - Perfect Encoding(FFT+爪巴卡常题)

    题面传送门 题意:给出 \(n\),构造出序列 \(b_1,b_2,\dots,b_m\) 使得 \(\prod\limits_{i=1}^mb_i\geq n\),求 \(\sum\limits_{ ...

  5. [CSP-S模拟测试]:卡常题/b(基环树+DP)

    题目描述 $ρ$有一个二分连通无向图,$X$方点.$Y$方点均为$n$个(编号为$1\sim n$).这个二分图比较特殊,每一个$Y$方点的度为$2$,一条黑色边,一条白色边.所有黑色边权值均为$a$ ...

  6. BZOJ3286 Fibonacci矩阵 矩阵 快速幂 卡常

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3286 题意概括 n,m,a,b,c,d,e,f<=10^1000000 题解 神奇的卡常题目 ...

  7. 第三届山西省赛1004 一道大水题(scanf)

    一道大水题 时间限制: C/C++ 2000ms; Java 4000ms 内存限制: 65535KB 通过次数: 44 总提交次数: 1020 问题描述 Dr. Pan作为上兰帝国ACM的总负责人, ...

  8. [luogu T71973]卡常者π酱

    [luogu T71973]卡常者π酱 题意 给定一个长度为 \(n\) 的字符串, 要求将字符串分割为若干段, 每一段要么是一个字符要么是前面几段的并的子串. 如果某一段是一个单独字符, 则产生 \ ...

  9. 【xsy1120】 支援(assist) dp+卡常

    妙啊算错时间复杂度了 题目大意:给你一棵$n$个节点的二叉树,每个节点要么是叶子节点,要么拥有恰好两个儿子. 令$m$为叶子节点个数,你需要在这棵二叉树中选择$i$个叶子节点染色,叶节点染色需要一定的 ...

随机推荐

  1. noi.ac #289. 电梯(单调队列)

    题意 题目链接 Sol 傻叉的我以为给出的\(t\)是单调递增的,然后\(100\rightarrow0\) 首先可以按\(t\)排序,那么转移方程为 \(f[i] = min_{j=0}^{i-1} ...

  2. Linux tail 命令

    tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件. tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只 ...

  3. Maven替换为国内仓库

    <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name&g ...

  4. Go 语言笔记

    Go 语言笔记 基本概念 综述 Go 语言将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡. 设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 ch ...

  5. bootstrap,bootstrap-table,bootstrapValidator,animate,layer配合起来搞事情

    资源准备(just download) bootstrap: http://www.bootcss.com/ bootstrap-table: http://bootstrap-table.wenzh ...

  6. CentOS7编译安装php7.1

    1.首先安装依赖包: yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl ...

  7. Mac系统编译FFmpeg

    转载请标明来源:我不是掌柜的博客 前言 维基百科解释:FFmpeg是一个开源软件,可以运行音频和视频多种格式的录影.转换.流功能,包含了libavcodec – 这是一个用于多个项目中音频和视频的解码 ...

  8. 解决topjui中工具栏按钮删除刷新从属表

    遇到了这么个问题:当在从属datagrid表格中,点击主表工具栏按钮中的删除,通过后台的多表删除的sql,返回给前台之后,从属表的数据成功在数据库中删除,但是在前台页面显示的时候,只刷新了主表,子表未 ...

  9. MySQL之表相关操作

    一 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 详见:http://www.cnblogs.com/linhaifeng/articles/7213670.html ...

  10. 以springMVC为例获取上传视频文件时长

    毕设项目是一个在线学习系统,教师用户有上传视频的功能,在答辩之前赶了一个demo出来,好多功能都写死了,比如课程学习进度就是被我写死在前端的一个变量,最近导师要我把项目打包发给他,这才心慌慌赶紧把这些 ...