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

fzyzojP3979 -- [校内训练20180914]魔法方阵

 

原题见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*10+numb);
    (fl==true)&&(x=-x);
}
namespace Miracle{
const int N=5000+5;
const int inf=0x3f3f3f3f;
int v[N][N];
int n;
struct node{
    int nxt,to,val;
}e[2*N];
int hd[2*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[2*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[1]=0;
    for(reg i=1;i<=2*n;++i){
        int id=0;
        for(reg j=1;j<=2*n;++j){
            if(!vis[j]&&dis[j]<dis[id]) id=j;
        }
        vis[id]=1;
        //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=1;j<=2*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=1;i<=n;++i){
        for(reg j=1;j<=n;++j){
            rd(a[i][j]);
            if(i==j&&a[i][j]!=0) 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 0;
    }
    prim();
//    cout<<" after prim "<<endl;
    for(reg i=1;i<=n;++i){
        if(!fl) break;
        dfs(i,i,0,0);
    }
    if(!fl){
        puts("NOT MAGIC");return 0;
    }
    puts("MAGIC");return 0;
}

}
signed main(){
    Miracle::main();
    return 0;
}

/*
   Author: *Miracle*
   Date: 2019/2/3 9:16:23
*/

 

或者:

 

i,j,k三排点

这个还是常数太大

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

还是2s左右

还是第一个吧

 

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

 充要性显然

转载于:https://www.cnblogs.com/Miracevin/p/10349465.html

相关文章:

  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • yum命令详解
  • 《天龙八部3D》Unity技术方案揭秘
  • PAT A1050
  • [学习笔记]二项式反演
  • 飞控之卡尔曼滤波浅析
  • CentOS 7 修改主机名
  • [译] Webpack 4 的故事以及如何用正确的方式去最终配置它【更新版】
  • 译米田引理
  • Docker中mysql大小写敏感配置不起作用的问题排查
  • 一份运维监控的终极秘籍!监控不到位,宕机两行泪
  • leetcode386. Lexicographical Numbers
  • 30秒的PHP代码片段(1)数组 - Array
  • docker-2-安装
  • 使用 QuickBI 搭建酷炫可视化分析
  • [译] React v16.8: 含有Hooks的版本
  • 2017年终总结、随想
  • laravel 用artisan创建自己的模板
  • MaxCompute访问TableStore(OTS) 数据
  • Objective-C 中关联引用的概念
  • RxJS: 简单入门
  • Spring Boot MyBatis配置多种数据库
  • Spring核心 Bean的高级装配
  • Spring框架之我见(三)——IOC、AOP
  • 闭包--闭包作用之保存(一)
  • 分类模型——Logistics Regression
  • 来,膜拜下android roadmap,强大的执行力
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端之React实战:创建跨平台的项目架构
  • 数组的操作
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (安卓)跳转应用市场APP详情页的方式
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • .axf 转化 .bin文件 的方法
  • .bat文件调用java类的main方法
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .gitattributes 文件
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 按比例显示图片的缩略图
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET6 开发一个检查某些状态持续多长时间的类
  • :=
  • @Autowired多个相同类型bean装配问题
  • @JSONField或@JsonProperty注解使用
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [100天算法】-x 的平方根(day 61)
  • [C puzzle book] types
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [C#]扩展方法
  • [C/C++随笔] char与unsigned char区别