题目分析:

给所有边按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. HTML和CSS前端教程05-CSS盒模型

    目录 1. CSS盒模型 1.1 元素的尺寸 1.2. 元素内边距 padding 1.3. 元素外边距 margin 1.4. 处理溢出overflow 1.5. 元素的可见性Visibility ...

  2. Mysql基本操作指令集锦

    一.MySQL服务的启动.停止与卸载 在 Windows 命令提示符下运行: 启动: net start MySQL 停止: net stop MySQL 卸载: sc delete MySQL 二. ...

  3. windows 服务中托管asp.net core

    在windows 服务中托管asp.net core SDK 2.1.300 官方示例 1.添加运行标识符 xml <PropertyGroup> <TargetFramework& ...

  4. chart 模板 - 每天5分钟玩转 Docker 容器技术(165)

    Helm 通过模板创建 Kubernetes 能够理解的 YAML 格式的资源配置文件,我们将通过例子来学习如何使用模板. 以 templates/secrets.yaml 为例: 从结构看,文件的内 ...

  5. MySQL5.7参数log_timestamps

    最近测试MySQL 5.7.21  Community Server这个版本的MySQL数据库时,发现其错误日志的时间跟系统当前时间不一致,后面检查发现日期时间格式都是UTC时间,查了一下相关资料,原 ...

  6. 爬虫之Requests&beautifulsoup

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...

  7. python开发【lambda篇】

    lambda 与 python 高级函数的配套使用 filter函数 过滤 __author__ = "Tang" # filter(lambda, []) people = [' ...

  8. linux服务器硬盘IO读写负载高来源定位 pt-ioprofile

    首先 .用top命令查看   1 2 3 4 5 top - 16:15:05 up 6 days,  6:25,  2 users,  load average: 1.45, 1.77, 2.14 ...

  9. linux 下 命令行中运行 selenium chrome 问题

    1.chrome 现在不允许使用root运行了. 2.无界面 chromedriver 调用chrome 会出错. <另外一定要匹配 chromedriver和chrome 的版本. 要不会出各 ...

  10. 18 python 初学(time、random 模块)

    # _author: lily # _date: 2019/1/13 import time import datetime print(help(time)) # print(time.time() ...