【题目链接】:http://codeforces.com/problemset/problem/505/D

【题意】



让你构造一张有向图;

n个点;

以及所要求的m对联通关系(xi,yi)

即要求这张有向图中的点xi能够联通到点yi;

问你最少需要添加多少条边才够;

【题解】



先将输入的m条边;

当成无向边,构成一张无向图;

然后对于构成这张图的各个联通块;

设len为这个联通块的节点个数;

如果这个联通块它对应的有向图内有环;

则这个联通块需要len条有向边;

(即这len个节点首尾相连构成一个环,只需要len条边)

这样不管你内部要怎么样的连通性都行,因为任意两个点都是联通的;

如果对应的有向图没环;

则这个联通块只需要len-1条有向边;

(总能用len-1条边构造出来符合要求的图的..因为没有环)

把各个联通块的答案都累加起来就好;

有向图找环用拓扑排序就好;

(防止爆栈什么的 。)



【Number Of WA】



0



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0),cin.tie(0) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e5+100; int n,m,rudu[N],ans;
vector <int> G[N],G1[N],v;
queue <int> dl; bool vis[N]; void dfs(int x){
if (vis[x]) return;
vis[x] = true;
v.pb(x);
int len = G1[x].size();
rep1(i,0,len-1)
dfs(G1[x][i]);
} int main(){
//Open();
Close();//scanf,puts,printf not use
//init??????
cin >> n >> m;
rep1(i,1,m){
int x,y;
cin >> x >> y;
G[x].pb(y);
rudu[y]++;
G1[x].pb(y);
G1[y].pb(x);
} rep1(i,1,n)
if (!vis[i]){
v.clear();
dfs(i);
while (!dl.empty()) dl.pop();
rep1(j,0,(int) v.size()-1)
if (rudu[v[j]]==0){
dl.push(v[j]);
}
int num = 0;
while (!dl.empty()){
int x = dl.front();
num++;
dl.pop();
rudu[x] = -1;
rep1(j,0,(int) G[x].size()-1){
rudu[G[x][j]]--;
if (rudu[G[x][j]]==0){
dl.push(G[x][j]);
}
}
}
ans+=(int) v.size() - (num==(int) v.size() ? 1:0);
}
cout << ans << endl;
return 0;
}

最新文章

  1. Java基础学习 -- 异常
  2. Html做三个平台原生APP啦
  3. neutron用linux_bridge部署provider网络
  4. 30.编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。
  5. sourceTree忽略跟踪文件
  6. JavaScript面试库
  7. csuoj 1329: 一行盒子
  8. JS--事件对象中部份浏览器不兼容方法
  9. POJ1260Pearls
  10. vs code(egret wing) php配置与调试
  11. POJ3630——简单Trie树
  12. IDEA第一章----下载安装idea,设置背景字体编码,配置JDK/Maven
  13. ajax常用实例代码总结新手向参考(一)
  14. [UOJ#207. 共价大爷游长沙]——LCT&amp;随机化
  15. 最大子数组(I, II, III,IV,V)和最大子数组乘积 (动态规划)
  16. 华为ap3010DN-V2刷出胖AP并配置接入POE交换机实现上网
  17. SpringBoot主程序类,主入口类
  18. 查看hbase中的中文
  19. Jackson高并发情况下,产生阻塞
  20. 20145104张家明 《Java程序设计》第10周学习总结

热门文章

  1. 【codeforces 724E】Goods transportation
  2. servlet详细理解
  3. POJ 2018
  4. CRM实施中应避免的5大问题
  5. hibernate 管理 Session(单独使用session,非spring)
  6. C语言的长处和缺点
  7. Mac OS下PHP开发环境的搭建——基于XAMPP和IntelliJ IDEA
  8. 利用Spring Hibernate注解packagesToScan的简化自动扫描方式
  9. python初始面向对象
  10. linux中openssl生成证书和自签证书