题目大意:给出一个 n 点 m 边的图,问最少加多少边使其能够存在奇环,加最少边的情况数有多少种。

解题关键:黑白染色求奇环,利用数量分析求解。

奇环:含有奇数个点的环。

二分图不存在奇环。反之亦成立。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
const int maxn=1e5+;
const int maxm=1e5+; int c[maxn]; //color,每个点的黑白属性,-1表示还没有标记,0/1表示黑白,比vis数组多一个作用
ll num[]; //在一次DFS中的黑白点个数
bool f=; //判断是否出现奇环 int head[maxn],tot,n,m,a,b;
struct edge{
int to;
int nxt;
}e[*maxm];
void add_edge(int u,int v){
e[tot].to=v;
e[tot].nxt=head[u];
head[u]=tot++;
}
void init(){
memset(head,-,sizeof head);
tot=;
memset(c,-,sizeof c);
} void dfs(int u,int x){
if(f)return;
c[u]=x;
num[x]++;
for(int i=head[u];~i;i=e[i].nxt){
int j=e[i].to;
if(c[j]==-) dfs(j,!x);
else if(c[j]==x){//存在奇环
f=;
return;
}
}
}
int main(){
init();
cin>>n>>m;
for(int i=;i<=m;i++){
cin>>a>>b;
add_edge(a,b);
add_edge(b,a);
}
ll ans=,ans2=;
if(m==){
ans=(ll)n*(n-)*(n-)/;
printf("3 %lld\n",ans);
return ;
}
for(int i=;i<=n&&(!f);i++){
if(c[i]==-){
num[]=num[]=;
dfs(i,);
ans+=(num[]*(num[]-)+num[]*(num[]-))/;
if(num[]==&&num[]==){
ans2+=n-;
}
}
}
if(f) printf("0 1\n");
else if(ans) printf("1 %lld\n",ans);
else printf("2 %lld\n",ans2);
return ;
}

最新文章

  1. 【特种兵系列】String中的==和equals()
  2. IOS在自己网站发布APP(企业版$299上线流程)
  3. 怎样绘制ZBrush中的纹理
  4. js 创建书签小工具之理论
  5. 华为OJ—火车进站(栈,字典排序)
  6. AS与JS相互通信(Flex中调用js函数)
  7. DWZ(JUI) 教程 中如何整合第三方jQuery插件
  8. 解决Genemotion 安装出现“Unable to start......”的问题
  9. [Swust OJ 1097]--2014(数位dp)
  10. CADisplayLink使用中的循环引用问题的解决
  11. TPYBoard—MicroPython开发板免费试用!你最想抱走哪款?
  12. jdk8新特性(文章推荐)
  13. Java学习之类的构建方法(函数)
  14. 微信小程序之Todo
  15. Python学习之MySQLdb模块
  16. EF 一个简单的使用
  17. Nginx服务器中配置非80端口的端口转发方法详解
  18. 深度学习原理与框架-递归神经网络-RNN网络基本框架(代码?) 1.rnn.LSTMCell(生成单层LSTM) 2.rnn.DropoutWrapper(对rnn进行dropout操作) 3.tf.contrib.rnn.MultiRNNCell(堆叠多层LSTM) 4.mlstm_cell.zero_state(state初始化) 5.mlstm_cell(进行LSTM求解)
  19. Golang 端口复用测试
  20. python基础之socket编程 (转自林海峰老师)

热门文章

  1. JS 正则验证 test()
  2. linux服务器应用NTP配置时间同步
  3. hdu 1849 Rabbit and Grass(nim)
  4. MySQLDump 备份 Shell 脚本
  5. IDEA 上传更新的代码到码云上
  6. LeetCode OJ:Path Sum II(路径和II)
  7. 手动安装mysql-5.0.45.tar.gz
  8. 使用手势对UIImageView进行缩放、旋转和移动(转)
  9. Spring转账业务_XML配置事物控制
  10. Oracle hash分区的秘密