原题见CF632F

https://blog.csdn.net/Steaunk/article/details/80217764

这个比较神仙了

点边转化,

把max硬生生转化成了路径最大值,再考虑所有路径最大值的最小值

再通过<=,>=变成=

简单证明一下充要性:
如果都满足f(i,j)=a(i,j),那么对于路径aij->aik->akj->aij也都满足,所以一定成立

如果存在一个f(i,j)<a(i,j),那么一定会有某一步a(k1,k3)>max(a(k1,k2),a(k2,k3)),才会使得f(i,j)<a(i,j),

那么一定也是不合法的了

prim+dfs稳定O(n^2)

网格不光是二分图,网络流,,还可以拆点,点边转化

并且,ai,k->ai,l+al,k的路径拆分有点意思

#include<bits/stdc++.h>
#define il inline
#define reg register int
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=+;
const int inf=0x3f3f3f3f;
int v[N][N];
int n;
struct node{
int nxt,to,val;
}e[*N];
int hd[*N],cnt;
void add(int x,int y,int z){
e[++cnt].nxt=hd[x];
e[cnt].to=y;
e[cnt].val=z;
hd[x]=cnt;
}
int pre[*N],tot;
bool fl;
int a[N][N];
int dis[N];
int from[N];
bool vis[N];
void prim(){
memset(dis,0x3f,sizeof dis);
dis[]=;
for(reg i=;i<=*n;++i){
int id=;
for(reg j=;j<=*n;++j){
if(!vis[j]&&dis[j]<dis[id]) id=j;
}
vis[id]=;
//cout<<" add new "<<id<<" "<<from[id]<<" dis "<<dis[id]<<endl;
if(from[id])add(from[id],id,dis[id]);
if(from[id])add(id,from[id],dis[id]);
for(reg j=;j<=*n;++j){
if(vis[j]) continue;
if(dis[j]>v[id][j]){
dis[j]=v[id][j];
from[j]=id;
}
}
}
}
void dfs(int x,int rt,int fa,int mx){
if(x!=rt&&((rt<=n&&x>n)||(rt>n&&x<=n))){
//cout<<" checking "<<x<<" "<<rt<<" mi "<<mx<<endl;
if(a[rt][x-n]!=mx) fl=false;
}
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa) continue;
dfs(y,rt,x,max(mx,e[i].val));
}
}
int main(){
rd(n);
fl=true;
memset(v,0x3f,sizeof v);
for(reg i=;i<=n;++i){
for(reg j=;j<=n;++j){
rd(a[i][j]);
if(i==j&&a[i][j]!=) fl=false;
if(i>j&&a[i][j]!=a[j][i]) fl=false;
v[i][j+n]=a[i][j];
v[j+n][i]=a[i][j];
}
}
if(!fl){
puts("NOT MAGIC");return ;
}
prim();
// cout<<" after prim "<<endl;
for(reg i=;i<=n;++i){
if(!fl) break;
dfs(i,i,,);
}
if(!fl){
puts("NOT MAGIC");return ;
}
puts("MAGIC");return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/2/3 9:16:23
*/

或者:

i,j,k三排点

这个还是常数太大

排序已经用256作为基底基排了

还是2s左右

还是第一个吧

这个思路主要是考虑单个三元环的边出现的大小关系

充要性显然

fzyzojP3979 -- [校内训练20180914]魔法方阵的更多相关文章

  1. [校内训练20_01_17]ABC

    1.平面上每次加入直角边平行于坐标轴的等腰直角三角形,每次询问某个点被覆盖了多少次. 大常数算法:O(nlog^2) #include<bits/stdc++.h> using names ...

  2. [4.14校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. hzwer又出丧题虐人 4道noi....        很奇怪 每次黄学长出题总有一题我做过了. 嗯题目你们自己看看呗 好难解释 ----- ...

  3. [2017.4.7校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...

  4. [3.24校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...

  5. 19_04_19校内训练[Game]

    题意 给出n,等概率地生成一个1~n的数列.现在有n个人从左到右站成一排,每个人拿有当前数列位置上的数字,并且一开始都不知道数字是多少(但知道n是多少).从左到右让每个人进行如下选择: 1.选择保留自 ...

  6. 19_04_02校内训练[deadline]

    题意 给出一个二分图,左边为A集合,右边为B集合,要求把A集合中每一个点染为黑白两色中的一种,B集合中的颜色已定.染色后对于原本相邻且颜色相同的点,建立新的二分图,即得到了两个新的二分图,它们是独立的 ...

  7. 平面图转对偶图&19_03_21校内训练 [Everfeel]

    对于每个平面图,都有唯一一个对偶图与之对应.若G‘是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...

  8. fzyzojP3580 -- [校内训练-互测20180315]小基的高智商测试

    题目还有一个条件是,x>y的y只会出现一次(每个数直接大于它的只有一个) n<=5000 是[HNOI2015]实验比较 的加强版 g(i,j,k)其实可以递推:g(i,j,k)=g(i- ...

  9. fzyzojP3372 -- [校内训练20171124]博弈问题

    对于每个点都要答案 还是异或 trie树合并石锤了 朴素枚举是O(n^2*17)的 怎么办呢? 我们发现合并的时候,一些部分的trie的子树还是不变的 改变的部分也就是合并的复杂度可以接受 鉴于大部分 ...

随机推荐

  1. OWASP移动安全漏洞Top 10

    •脆弱的服务器端安全控制 在OWASP排第一的漏洞是“脆弱的服务器端安全控制”,顾名思义,就是没有以一个安全的方式从移动应用程序向服务器端发送数据,或在发送数据时暴露了一些敏感的API.例如,考虑对一 ...

  2. C# read write ini file

    [DllImport("kernel32")] private static extern long WritePrivateProfileString(string sectio ...

  3. 20155217《网络对抗》Exp06 信息搜集与漏洞扫描

    20155217<网络对抗>Exp06 信息搜集与漏洞扫描 实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 ...

  4. 20155236范晨歌_Web安全基础实践

    20155236范晨歌_Web安全基础实践 目录 实践目标 WebGoat BurpSuite Injection Flaws Cross-Site Scripting (XSS) 总结 实践目标 ( ...

  5. 20155321 《网络对抗》 Exp6 信息搜集与漏洞扫描

    20155321 <网络对抗> Exp6 信息搜集与漏洞扫描 实验内容 信息搜集 whois 在kali终端输入whois 网址,查看注册的公司.服务.注册省份.传真.电话等信息 dig或 ...

  6. # 20155337《网络对抗》Exp7 网络欺诈防范

    20155337<网络对抗>Exp7 网络欺诈防范 实践目标 实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建立 ...

  7. python 翻转棋(othello)

    利用上一篇的框架,再写了个翻转棋的程序,为了调试minimax算法,花了两天的时间. 几点改进说明: 拆分成四个文件:board.py,player.py,ai.py,othello.py.使得整个结 ...

  8. SQLAlchemy 与 fask-SQLAlchemy 中的多表查询例子

    我们知道,<学生.课程.选课>,是一个典型的多对多关系. 现分别用 SQLAlchemy 与 fask-SQLAlchemy 实现. 声明:本人实测通过. 使用 SQLAlchemy fr ...

  9. zabbix问题之snmp监控端口流量断图

    zabbix之snmp监控端口断图问题 在使用zabbix的snmp方式的监控端口流量时,某一个图总是断断续续的(被监控设备有较大的端口流量),经常会出现几分钟内没有图像的问题. 端口流量断图原因: ...

  10. idea Cannot Resolve Symbol 问题解决

    总结:要多根据有问题的提示来进行百度搜索,这一次我就是搜索了 idea 提示的错误信息 Cannot Resolve Symbol ,才找到的解决方案,所以说出现问题,如果不是很复杂的场景或者原因很多 ...