传送门
题意: 给定一个无向图, 然后你要给这幅图每条边加上一个方向, 使得这个图是有向图强连通

思路: 关键在于如何判断无解的情况, 如果能保证当前的图有解, 那么直接dfs一下就可以出答案. 仔细想想知道. 其实就是判断一下当前这幅图是否有”桥” , 联通分量的定义的桥, 如果有桥则一定无解, 否则就有解, 然后dfs一下就可以得到答案了. 细节请看代码
AC Code

const int maxn = 1e6+5;
int dfn[maxn], low[maxn];
int dfs_id, bri_num;
int n, m;
int cnt , head[maxn];
void init() {Fill(dfn, 0); Fill(low, 0);cnt = 2; Fill(head, -1);dfs_id = bri_num = 0;
}
struct node {int to, next;
}e[maxn<<1];
void add(int u, int v) {e[cnt] = node{v, head[u]};head[u] = cnt++;
}
void Findbri(int u, int fa) {dfn[u] = low[u] = ++dfs_id;for(int i = head[u] ; ~i ; i = e[i].next) {int v = e[i].to;if((i^1) == fa) continue;if(!dfn[v]) {Findbri(v, i);low[u] = min(low[u], low[v]);if(low[v] > dfn[u]) bri_num++;}else low[u] = min(low[u], dfn[v]);}
}
int ans[maxn], vis[maxn];
void dfs(int u, int fa) {vis[u] = 1;for(int i = head[u] ; ~i ; i = e[i].next) {int to = e[i].to;ans[i/2] = (i&1) ? 0 : 1;if (to == fa || vis[to]) continue;dfs(to, u);}
}
void solve() {scanf("%d%d", &n, &m);init();for (int i = 1 ; i <= m ; i ++) {int u, v;scanf("%d%d", &u, &v);add(u, v); add(v, u);}for (int i = 1 ; i <= n ; i ++) {if (!dfn[i]) Findbri(i, -1);}if (bri_num) {puts("impossible");return ;}for (int i = 1 ; i <= n ; i ++) {if (!vis[i]) dfs(i, -1);}for (int i = 1 ; i <= m ; i ++) {printf("%d", ans[i]);}printf("\n");
}

牛客练习赛 25 E题 定向 【桥 + 思维】 无向图定方向变强连通图相关推荐

  1. 牛客竞赛36签到题A(思维)

    //第一题签到(第一次做牛客的诶) 链接:https://ac.nowcoder.com/acm/contest/328/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C+ ...

  2. E 定向 牛客练习赛25

    tarjan 父节点和子节点 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cmath> 4 #incl ...

  3. 牛客练习赛25 B-最长区间

    题目链接: 题目描述 给你一个长度为 n 的序列 a ,求最长的连续的严格上升区间的长度. 同时会进行 m 次修改,给定 x , y ,表示将 ax 修改为 y ,每次修改之后都要求输出答案. 输入描 ...

  4. 牛客练习赛25 因数个数和

    题目链接 题目描述 q次询问,每次给一个x,问1到x的因数个数的和. 输入描述: 第一行一个正整数q : 接下来q行,每行一个正整数 x 输出描述: 共q行,每行一个正整数表示答案 示例1 输入 4 ...

  5. 牛客练习赛41 D.最小相似度(思维+bfs)

    传送门 给定nnn个长mmm位的二进制串 求一个二进制串TTT,定义valival_ivali​是TTT与第iii个二进制串相同的位数 使得max(val1,val2....valn)max(val_ ...

  6. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  7. 踩不出足迹(牛客练习赛88 )

    踩不出足迹(牛客练习赛88 ) 题意: 长度为n的数组a,每个数是一个k位二进制 定义一下操作: 令第一次得到的结果为 a1a_1a1​.你需要从第二个数开始,每次可以选择与上一次得到的结果异或或者同 ...

  8. 牛客练习赛29 题解

    牛客练习赛29 A. 可持久化动态图上树状数组维护01背包 题解 这题跟标题没有任何关系- 贪心的使得负数删除的时候下标尽可能大,然后正数的时候下标尽可能小. 观察到每个数下标最大的时候就是它的初始下 ...

  9. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

最新文章

  1. AI专家Marcus质疑深度学习:面临十大挑战(含参考文献)
  2. jdk和tomcat配置
  3. TechWorld2021技术嘉年华,解锁“不一样”的技术盛会
  4. ES6——Generator 函数的语法
  5. Atitit 延迟绑定架构法attilax总结
  6. 谷歌验证码 ReCaptcha 破解
  7. HTTP权威指南学习笔记:连接管理
  8. SourceOffSite使用方法
  9. python PIL图片转PDF
  10. L2 Spare the spider 不要伤害蜘蛛
  11. 滑块验证码的解决方法
  12. GuzzleHttp使用
  13. 五子棋游戏源码和核心算法的讲解(简易五子棋web版)
  14. c++最近公共祖先LCA(倍增算法和tarjan)
  15. 数据库查询报错Error Code 1064
  16. 我的物联网项目(二十一) 摇摇车三种消费模式和城市合伙人
  17. Delphi - 2010下安装IOComp
  18. 如何搭建属于 “数据业务”的指标体系?
  19. cesium城市建筑物贴图(地图数据篇.12)
  20. 管道/查明文件夹中图片个数

热门文章

  1. 工商银行分布式服务C10K场景的解决方案
  2. python程序员脱单攻略_520 情人节 :属于Python 程序员的脱单攻略大合集
  3. Visual C++中删除托管对象、包装库及其他
  4. vue.js的核心思想
  5. Unity-Ads广告插件
  6. ISP Pipeline ISO快门光圈曝光
  7. 晨曦记账本怎么记录家庭收支,借还款
  8. 弘辽科技:新宝贝如何快速打爆手淘首页流量。
  9. 扩展巴科斯范式 EBNF
  10. aws api gateway 设置WebSocket API集成请求