题意:

思路:Dilworth定理:对于一个偏序集,最少链划分等于最长反链长度。
           Dilworth定理的对偶定理:对于一个偏序集,其最少反链划分数等于其最长链的长度。

最长反链=最小路径覆盖

floyd传递闭包后,用n-二分图最大匹配数即为答案(因为是点可重最小路径覆盖,所以要先用floyd求传递闭包)

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef int lint;
const int inf= 0x3f3f3f3f;
const int maxn = 505;
struct dinic{static const int N = 1005;static const int M = 2000005;static const lint inf = 0x3f3f3f3f;int he[N],ne[M],ver[M],d[N];lint edge[M];int s,t,tot;queue<int> que;void init( int n ){for( int i = 0;i <= n;i++ ){he[i] = 0;}tot = 1;}void add( int x,int y,lint z ){ver[++tot] = y; ne[ tot ] = he[x]; he[x] = tot; edge[ tot ] = z;ver[++tot] = x; ne[tot] = he[y]; he[y] = tot;edge[tot] = 0;}bool bfs(){memset( d,0,sizeof( d ) );while( que.size() ) que.pop();que.push( s );d[s] = 1;while( que.size() ){int x = que.front();que.pop();for( int cure = he[x];cure;cure = ne[cure] ){int y = ver[cure];if( edge[cure] && !d[y] ){que.push( y );d[ y ] = d[x] + 1;if( y == t ) return 1;}}}return 0;}lint dfs( int x,lint flow ){if( x== t ) return flow;lint rest = flow,k;for( int cure = he[x];cure && rest;cure = ne[cure] ){int y = ver[cure];if( edge[cure] && d[ y ] == d[x] + 1 ){k = dfs( y,min( rest,edge[cure] ) );if( !k ) d[ y ] = 0;edge[cure] -= k;edge[ cure^1 ] += k;rest -= k;}}return flow - rest;}lint max_flow( int x,int y ){s = x; t = y;lint maxflow = 0;lint flow = 0;while( bfs() )while( flow = dfs( s,inf ) ) maxflow += flow;return maxflow;}
} g;
int dist[maxn][maxn];
void floyd(int n){for( int k = 1;k <= n;k++ ){for( int i = 1;i<= n;i++ ){for( int j = 1;j <= n;j++ ){if( dist[i][j] > dist[i][k]+dist[k][j] ){dist[i][j] = dist[i][k]+dist[k][j];}}}}
}
int main(){int n,m,S,T;scanf("%d%d",&n,&m);S = 0,T = 2*n+1;g.init(T);for( int i = 1;i<= n;i++ ){for( int j = 1;j <= n;j++ ){dist[i][j] = inf;}dist[i][i] = 0;}for( int x,y,i = 1;i <= m;i++ ){scanf("%d%d",&x,&y);dist[x][y] = 1;}floyd(n);for( int i = 1;i <= n;i++ ){g.add(S,i,1);g.add(i+n,T,1);}for( int i = 1;i <= n;i++ ){for( int j = 1;j <= n;j++ ){if( i == j || dist[i][j] == inf ) continue;g.add( i,j+n,1 );}}int ans = n - g.max_flow(S,T);printf("%d\n",ans);return 0;
}

UOJ 2718 毕业旅行(diworth定理)相关推荐

  1. BZOJ 2718/1533 Violet 4 毕业旅行

    2718: [Violet 4]毕业旅行 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 676  Solved: 391 [Submit][Stat ...

  2. BZOJ2718毕业旅行

    2718: [Violet 4]毕业旅行 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 366 Solved: 204 Description Inp ...

  3. 2016级算法期末模拟练习赛-A.wuli51和京导的毕业旅行

    1063 wuli51和京导的毕业旅行 思路 中等题,二分+贪心. 简化题意,将m+1个数字分成n份,ans为这n段中每段数字和的最大值,求ans最小值及其方案. 对于这种求最小的最大值,最常用的方法 ...

  4. 字节跳动---毕业旅行问题

    字节跳动-毕业旅行问题 文章目录 字节跳动---毕业旅行问题 一.问题描述 二.分析 三.代码 一.问题描述 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市 ...

  5. 滴滴笔试毕业旅行——回溯法(dfs)

    题目: 题目描述: 小滴正在筹划他的毕业旅行.他打算去找他的外国网友们,首先第一站是法国巴黎,但是去巴黎的路线有很多,交通工具也有很多可供选择.现在有一个结点数为n,边的条数为m的无向图表示小滴到巴黎 ...

  6. 毕业旅行 | 用一场纽约5日游告别难忘青葱岁月

    时光如梭,毕业季悄然而至,青葱岁月的点点滴滴终将成为美好回忆.和朋友们用一场毕业旅行告别无悔青春,缅怀那些一起哭过笑过的日子,迎接人生旅程的全新开始吧~~为你的毕业季带来满满仪式感! 第一天 随上随下 ...

  7. 字节编程题 毕业旅行问题

    小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的花销.给定一组 ...

  8. 马卡龙色系旅游相册毕业纪念册毕业旅行PPT模板-优页文档

    模板介绍 马卡龙色系旅游相册毕业纪念册毕业旅行PPT模板-优页文档.一套,毕业答辩,毕业相册,幻灯片模板,内含青色,红色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你 ...

  9. [编程题]毕业旅行问题

    [编程题]毕业旅行问题 时间限制:1秒 空间限制:32768K 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有 ...

最新文章

  1. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(4月16日-4月22日)
  2. js循环判断有无重复值_JavaScript中的while循环
  3. Python获得某个范围的的随机整数
  4. 信息学奥赛一本通 1039:判断数正负 | OpenJudge NOI 1.4 01
  5. 以正确的方式招募数据科学家!
  6. WORD中插入的公式与文字对不齐——公式比文字高——文字比公式低
  7. [转载] Golang-简洁的并发
  8. 非线性系统 知识梳理
  9. gms认证流程_GMS测试认证的具体操作流程
  10. linux使用163的yum源配置
  11. pearson相关性
  12. bugly android升级,Android项目引入bugly在线更新
  13. Python烤地瓜案例
  14. HTML+CSS练习——实现京东登录静态页面
  15. c语言浮点变量是什么意思,C语言中说的浮点型是什么意思呢 C语言的浮点数是什么...
  16. 计算机科学方向的会议或期刊,计算机顶会和顶刊_计算机顶会_顶会
  17. 张继群,创青春-数字经济赛道,中国创翼临沂市决赛,创客中国-中小企业创客比赛-临沂市决赛
  18. NEIL: Extracting Visual Knowledge from Web Data
  19. msconfig打不开,运行找不到msconfig解决办法
  20. win7更新_不更新,抱歉现在才告诉你,win10还有个LTSC版,比win7还干净

热门文章

  1. 行测考试--数量关系
  2. 红米2A高配刷机记录
  3. c语言两个数相乘怎么编程,C 程序将两个浮点数相乘
  4. 以太网交换机转发数据帧
  5. 关于nvivo导入视频后双击打开或右击打开,软件闪退的问题解决办法。供参考
  6. Mac浏览器无法上网但可以用微信等
  7. 黑苹果三码注入解决iMessage、FaceTime、APPStore、iCloud登录使用问题
  8. 匈牙利算法——海王们的渣男渣女行为
  9. 安卓显示时间java,Android/java 仿微信聊天列表时间显示规则
  10. 小程序获取设备像素比