全场只有3个人A的题扔过来当今天的T4.Orz DWX大爷考试时A掉这道题

网络流做法是题解做法,上CF就能看到

但是我们还有其他的方法!

我们有Havel定理的某条推论,既然这是一个树,那么某个子联通块中的点数一定大于边数

然后我们就贪心地选择,用上面的东西来判断是否可选

然后没了

结果考试的时候直接对于10的部分分输出一条链就不会了

Orz 龙哥 rand出60分

结果SDOI3道题和这道神题扔过来4个小时一起做的感觉真是爽

/* ***********************************************
Author        :BPM136
Created Time  :2016/4/25 17:00:52
File Name     :DSF.cpp
************************************************ */#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<bitset>
#include<queue>
#include<ctime>
#include<set>
#include<map>
#include<utility>
#include<vector>
#include<functional>
#include<numeric>
#include<memory>
#include<iterator>
#define LL long long
#define DB double
#define LB long double
#define UL unsigned long
#define ULL unsigned long long
#define pb push_back
#define popb pop_back
#define get(a,i) a&(1<<(i-1))
#define PAU putchar(32)
#define ENT putchar(10)
#define clr(a,b) memset(a,b,sizeof(a))
#define fo(_i,_a,_b) for(int _i=_a;_i<=_b;_i++)
#define fd(_i,_a,_b) for(int _i=_a;_i>=_b;_i--)
#define efo(_i,_a) for(int _i=last[_a];_i!=0;_i=e[_i].next)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define filein(x) freopen(#x".in","r",stdin)
#define fileout(x) freopen(#x".out","w",stdout)
#define mkd(x) freopen(#x".in","w",stdout);
#define setlargestack(x) int size=x<<20;char *p=(char*)malloc(size)+size;__asm__("movl %0, %%esp\n" :: "r"(p));
#define end system("pause")
using namespace std;
LL read()
{LL f=1,d=0;char s=getchar();while (s<48||s>57){if (s==45) f=-1;s=getchar();}while (s>=48&&s<=57){d=d*10+s-48;s=getchar();}return f*d;
}
LL readln()
{LL f=1,d=0;char s=getchar();while (s<48||s>57){if (s==45) f=-1;s=getchar();}while (s>=48&&s<=57){d=d*10+s-48;s=getchar();}while (s!=10) s=getchar();return f*d;
}
inline void write(LL x)
{if(x==0){putchar(48);return;}if(x<0)putchar(45),x=-x;int len=0,buf[20];while(x)buf[len++]=x%10,x/=10;for(int i=len-1;i>=0;i--)putchar(buf[i]+48);return;
}
inline void writeln(LL x){write(x);ENT;}const int N = 200010;
const int M = 7;
const int MAX = 45;int cnt[M];
int f[N][M];//vector<int> all[MAX];
int all[MAX][N];
int tail[MAX];
int a[MAX][MAX], sz[MAX];
int n, m = -1;int tank[M][M][N];
int Ans[N][2];int GetNxt() {char s = getchar(); int d = 1;while(s != '?') s = getchar();while(s == '?') {s = getchar();if(s == '?') d ++;}return d;
}void init() {
//  fo(i, 0, MAX-1) all[i].clear();fo(i, 0, MAX - 1) tail[i] = 0;n = read();
//  scanf("%d",&n);fo(i, 1, n) {int len = 0, tmp = i;while(tmp > 0) {len ++, tmp /= 10;}len --;all[len][ tail[len]++ ] = i;if(len + 1 > m) m = len + 1;
//      m = max(m, len + 1);}fo(i, 0, m - 1) sz[i] = tail[i];
#define DEBUG2 looksize
//  fo(i, 0, m - 1) cout<< sz[i] << ' ';cout<<endl;
//  memset(a,0,sizeof(a));
//  char s1[MAX], s2[MAX];fo(i, 0, n - 2) {int x = GetNxt(); x --;int y = GetNxt(); y --;tank[x][y][ ++ tank[x][y][0] ] = i;a[x][y] ++;
#define DEBUG3 looka
//      cout<<x<<' '<<y<<endl;}//cout<<endl;
}int tmp[MAX], nu;
int v, e;
bool check() {fo(j, 1, (1 << m) - 1) {nu = 0;fo(i, 0, m - 1)if(j & (1 << i)) {tmp[nu ++] = i;}v = 0, e = 0;fo(i, 0, nu - 1) v += sz[tmp[i]];fo(i, 0, nu - 1) fo(j, 0, nu - 1) {e += a[tmp[i]][tmp[j]];}
#define DEBUG1 lookhell with the edge and ver// cout<< e << ' ' << v <<endl;if(e >= v) return 0;}return 1;
}void PushAns(int bit1, int bit2, int u, int v) {if(tank[bit1][bit2][0] == 0) swap(bit1, bit2);int G = tank[bit1][bit2][ tank[bit1][bit2][0] -- ];Ans[G][0] = u, Ans[G][1] = v;
}void work() {if(check() == 0) {puts("-1");return ;}
#define DEBUG4 breakpoint
//  cerr<<"startwork"<<endl;for(;1;) {int flag = 0;fo(i, 0, m - 1) {fo(j, 0, m - 1) {if(a[i][j] == 0) continue;if(sz[i] > 1) {a[i][j] --, sz[i] --;if(check()) {
#define DEBUG5 lookedge1
//                      write(all[i].back()); PAU; writeln(all[j][0]);PushAns(i, j, all[i][ tail[i]-1 ], all[j][0]);tail[i] --, flag = 1;break;}sz[i] ++, a[i][j] ++;}if(sz[j] > 1) {a[i][j] --, sz[j] --;if(check()) {
#define DEBUG6 lookedge2
//                      write(all[i][0]); PAU; writeln(all[j].back());PushAns(i, j, all[i][0], all[j][ tail[j]-1 ]);tail[j] --; flag = 1;break;}sz[j] ++, a[i][j] ++;}}if(flag) break;}if(!flag) break;}fo(i, 0, m - 1) fo(j, 0, m - 1) if(a[i][j] > 0) {
#define DEBUG7 lookedge3
//              write(all[i].back()); PAU; writeln(all[j].back());PushAns(i, j, all[i][ tail[i]-1 ], all[j][ tail[j]-1 ]);}fo(i, 0, n - 2) { write(Ans[i][0]); PAU; writeln(Ans[i][1]);}
}int main() {file(D);DB tt = clock();init();cerr << clock() - tt <<endl; DB ttt = clock();work();cerr<< clock() - ttt <<endl;cerr<< "Sumtime::" << clock() - tt <<endl;return 0;
}

CF411H 被遗忘的树 Havel定理 || 网络流相关推荐

  1. [matlab]havel定理证明(笔记)

    [matlab]havel定理证明 是否可以由度序列生成简单图是图论中一个重要的内容. havel定理是解决这一问题的重要方法. havel定理证明 问题引出 简单图化问题 简单图 简单图即是指图上不 ...

  2. 图的度序列:Havel定理

    给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 可图化的判定比较简单:d1+d2+.. ...

  3. POJ1659 Frogs' Neighborhood(Havel定理)

    题目: Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9932   Accepted ...

  4. POJ 1659 Frogs‘ Neighborhood (Havel 定理)

    Havel 定理: 序列的可图:给出一个 由非负整数组成的序列,如果是某个无向图的度序列,则称该序列是可图的. 而 Havel 定理,就是判断序列的可图的方法.先按度数从大到小排序, 每次处理完度数一 ...

  5. 【Havel 定理】Degree Sequence of Graph G

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2454 [别人博客粘贴过来的] 博客地址:https://www.cnblogs.com/debug ...

  6. 图的基本概念、握手定理、Havel定理

    图 图论被广泛应用在计算机科学.运筹学.信息论.控制论.网络理论.博弈论.化学.生物学.物理学.社会科学.语言学等领域: 图论的应用方向1:以理论计算机科学和信息科学为研究背景,探索图论在计算机科学和 ...

  7. 生成树的计数 Matrix-Tree(矩阵树)定理

    信息学竞赛中,有关生成树的最优化问题如最小生成树等是我们经常遇到的,而对生成树的计数及其相关问题则少有涉及.事实上,生成树的计数是十分有意义的,在许多方面都有着广泛的应用.本文从一道信息学竞赛中出现的 ...

  8. 矩阵树 Matrix-Tree 定理实现模板(高斯消元求解行列式)

    大佬1博客:https://www.cnblogs.com/zj75211/p/8039443.html 大佬2博客:https://www.cnblogs.com/yangsongyi/p/1069 ...

  9. AT4505-[AGC029F]Construction of a tree【构造题,hall定理,网络流】

    正题 题目链接:https://www.luogu.com.cn/problem/AT4505 题目大意 给出nnn个点和n−1n-1n−1个点集UiU_iUi​,每个点集中选择两个点连边使得该图是一 ...

最新文章

  1. Begin Your Service Journey
  2. Flex Builder 4.6 正式版eclipse插件利用BlazeDS于java交互实例
  3. JavaWeb-综合案例(用户信息)-学习笔记04【删除选中功能】
  4. django第三天(路由基础和路由分配)
  5. 共享一PYTHON 相关应用领域的介绍资料
  6. 洛谷——P1068 分数线划定
  7. iOS-项目常见文件
  8. Android 使用imageLoader来加载显示图片
  9. 揭秘 DockerCon 重量级演讲嘉宾(四)
  10. 搜索接口php,【微信公众平台开发】百度周边搜索接口php封装
  11. Vista下调整硬盘分区大小的方法
  12. Bill Gates 2007年哈佛演讲(中/英文)
  13. Tomcat服务器修改默认端口号
  14. 中国移动路由器怎么设置虚拟服务器,中国移动宽带无线wifi设置方法【图】
  15. 昂瑞微蓝牙芯片HS6620D调试记录
  16. CSS学习笔记(十)对表单和数据表格使用样式
  17. 让你平步青云的十个谈话技巧(转)
  18. EXCEL中条件格式中如果为真则停止的设置
  19. Git Stash 贮藏命令
  20. 39.超市微信促销活动5

热门文章

  1. 表单提交后跳转指定链接
  2. java操作excel表
  3. layui 多图上传和删除图片
  4. 攻防世界CTF —— PHP本地文件包含漏洞解题思路
  5. 解决ppt的页码不显示的问题
  6. RKH81 键盘快捷键
  7. 合格的CTO应该是什么样?雷军王海峰王小川等共谈「技术创新」| CNCC2020-1
  8. Linux操作系统的主要组成部分
  9. python 视频转场_OpenGL 实现视频编辑中的转场效果
  10. emby,jellyfin,kodi系列