题目分析:

给所有边按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. C# Html格式内容转Csv内容包括table(重点在rowspan和colspan合并),p,div元素

    Html格式内容转Csv内容,包括table(重点在rowspan和colspan合并),p,div元素,table不能包含嵌套功能. /// <summary> /// Html格式内容 ...

  2. CentOS6.9升级autoconf版本,解决”Autoconf version 2.64 or higher is required“错误

    安装软件时提示说需要Autoconf 2.64或更高的版本: # autoconf configure.ac:: error: Autoconf version 2.64 or higher is r ...

  3. Python浅谈requests三方库

    requests 三方库用于获取URL资源 1.GET请求访问一个页面 import requests r = requests.get('https://www.cnblogs.com/xqxacm ...

  4. (办公)MojoExecutionException

    MojoExecutionException : mavan打包错误. 通过以下命令解决:mvn clean install (新改的内容生效)

  5. Oracle 10g 应用补丁PSU 10.2.0.5.180717

    最近测试了一下在Oracle 10g下面(单实例下面)升级.应用补丁PSU 10.2.0.5.180717,打这个补丁的主要原因是 Oracle 将于 2019年6月启用新的SCN兼容性,并且由于Bi ...

  6. linux 按行分割文件

    $ sudo awk 'NR%2==1{close(p".txt");++p}{print > p".txt"}' test.txt $ sudo spl ...

  7. 谈谈当代大学生学习IT技术的必要性。

    21世纪,人类社会已经从工业时代全面进入信息化时代,IT技术的发展正在影响人类的日常生活.比如,外卖平台给人们的用餐提供了更多的选择,移动支付颠覆了传统的支付方式.网购使得人们的购物更加方便,真正做到 ...

  8. const关键字到底该怎么用

    原文地址:https://www.yanbinghu.com/2019/01/28/7442.html 前言 我们都知道使用const关键字限定一个变量为只读,但它是真正意义上的只读吗?实际中又该如何 ...

  9. 【Python 23】52周存钱挑战3.0(循环计数for与range)

    1.案例描述 按照52周存钱法,存钱人必须在一年52周内,每周递存10元.例如,第一周存10元,第二周存20元,第三周存30元,直到第52周存520元. 记录52周后能存多少钱?即10+20+30+. ...

  10. 日志学习系列(四)——NLog实例

    具体不想介绍了,新建一个解决方案 ,直接用NuGet安装就行了 具体项目代码可以在https://github.com/qiuxianhu/SimpleNLog下载