POJ 1904 【强连通分量】.cpp

题意:

  很久很久以前..

  有一个国王..

  他有好几个儿子..

  这些王子都喜欢上了邻国的公主..

  他们准备迎娶自己喜欢的公主中的一个..

  国王就让宰相给列一个清单..

  

  宰相就给了国王一个清单..上面写明了哪个王子将迎娶哪个邻国的公主..

  但是调皮的国王不太满意~~

  他还想知道他的儿子分别可以迎娶哪几个公主中的一个而不会让他的兄弟因此而吃醋..

  所以宰相又得重新写清单了..

 

  噢..对了~邻国的公主和王子人数一样多~<这是一个奇怪的国家..>

  输入:

  一个n表示有n个王子..

  接下来n行每行有一个m表示第i个王子喜欢m个公主..

  然后给出m个公主的序号..

  最后一行有n个数..代表第i个王子最后迎娶了的公主..

 

  输出:

  n行..每行第一个是m 表示有m个公主他可以选择~

  然后m个数是公主的序号..

  P.S 麻烦的国王还要求公主序号按从小到大给出..

<这是一些花心的王子..= =!! 可恨..>

 

思路:

  求强连通分量..

  王子和喜欢的公主连边..

  最后娶了的公主和该王子之间也连边..

  然后每个强连通分量就是他可以选择的公主序号..

 

Tips:

  因为类似拆点了..所以数组要开大一点..

 

Code:

View Code
  1 #include <stdio.h>
  2 #include <cstring>
  3 #include <algorithm>
  4 using namespace std;
  5 const int INF = 0x1f1f1f1f;
  6 #define clr(x) memset(x, 0, sizeof(x))
  7 const int MAXN = 2010*3;
  8 
  9 struct Edge
 10 {
 11     int to;
 12     int next;
 13 }edge[10000010];
 14 int head[MAXN];
 15 int tot;
 16 
 17 void add(int s, int u)
 18 {
 19     edge[tot].to = u;
 20     edge[tot].next = head[s];
 21     head[s] = tot++;
 22 }
 23 
 24 int dfn[MAXN], low[MAXN];
 25 int ins[MAXN], sta[MAXN], col[MAXN];
 26 int ti, top, cnt;
 27 int n;
 28 
 29 void tarjan(int u)
 30 {
 31     int i, k;
 32     dfn[u] = low[u] = ++ti;
 33     ins[u] = 1;
 34     sta[++top] = u;
 35     for(i = head[u]; i != -1; i = edge[i].next) {
 36         k = edge[i].to;
 37         if(dfn[k] == 0) {
 38             tarjan(k);
 39             low[u] = min(low[u], low[k]);
 40         } else if(ins[k]) {
 41             low[u] = min(low[u], dfn[k]);
 42         }
 43     }
 44     if(dfn[u] == low[u]) {
 45         cnt++;
 46         do
 47         {
 48             k = sta[top--];
 49             col[k] = cnt;
 50             ins[k] = 0;
 51         }while(u != k);
 52     }
 53 
 54 }
 55 
 56 void solve()
 57 {
 58     int i, k;
 59     ti = top = cnt = 0;
 60     clr(dfn);
 61     for(i = 1; i <= n; ++i)
 62         if(!dfn[i])
 63             tarjan(i);
 64 }
 65 
 66 int main()
 67 {
 68     int i, j, k;
 69     int a, m;
 70     int mar;
 71     int ans[MAXN];
 72     while(scanf("%d", &n) != EOF)
 73     {
 74         tot = 0;
 75         memset(head, 0xff, sizeof(head));
 76 
 77         for(i = 1; i <= n; ++i) {
 78             scanf("%d", &m);
 79             while(m--) {
 80                 scanf("%d", &a);
 81                 add(i, a+n);
 82             }
 83         }
 84         for(i = 1; i <= n; ++i) {
 85             scanf("%d", &mar);
 86             add(mar+n, i);
 87         }
 88 
 89         solve();
 90 
 91         int tmp;
 92         for(i = 1; i <= n; ++i) {
 93             tmp = 0;
 94             for(j = head[i]; j != -1; j = edge[j].next) {
 95                 k = edge[j].to;
 96                 if(col[i] == col[k])
 97                     ans[tmp++] = k;
 98             }
 99             sort(ans, ans+tmp);
100             printf("%d", tmp);
101             for(j = 0; j < tmp; ++j)
102                 printf(" %d", ans[j]-n);
103             puts("");
104         }
105     }
106     return 0;
107 }

 

 

题目链接:http://poj.org/problem?id=1904

转载于:https://www.cnblogs.com/Griselda/archive/2012/10/05/2711974.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电梯里为什么放镜子?90%的人都不知道

全世界只有3.14 % 的人关注了爆炸吧知识随着高层建筑不断的拔地而起我们每天可能会上下十几层的高楼人们当然不想去爬楼梯所以电梯已成为生活中必不可少的一部分▼我们几乎每天都会坐电梯上班时、回家时、逛街时当我们每走进电梯时第一动作都会干什么呢大概都会先看自己的妆容再…

WPF中的命令(Command)

这节来讲一下WPF中的命令(Command)的使用。【认识Command】我们之前说过&#xff0c;WPF本身就为我们提供了一个基础的MVVM框架&#xff0c;本节要讲的命令就是其中一环&#xff0c;通过在ViewModel中声明命令&#xff0c;从View中使用Binding绑定命令&#xff0c;就能实现从Vi…

matlab中给图像加几个矩形框_没想到!PPT中的这个效果,用好了,简直就是渣图美化器...

相信大家一定看到过&#xff0c;透过磨砂玻璃呈现在眼前的景色&#xff0c;是不是有种朦胧美&#xff1f;其实&#xff0c;在PPT中你也可以复刻出这样的效果。例如&#xff0c;这样的PPT页面&#xff1a;把背景虚化掉&#xff0c;更加突出主题。你想知道PPT中的磨砂效果&#x…

宝贝,我帮你清了购物车哦!

1 一场意外让本不富裕的女朋友雪上加霜甚至还回复了单身▼2 外甥女去参加舅舅的婚礼发现账本上没有她的名字于是写上自己的名字并随了兜里所有的钱人情世故整的明明白白▼3 我感觉再多吹几首他们就能复合......▼4 在家隔离第N天果然天下沙雕是一家▼5 我猜中了开头但没猜…

Dapr牵手.NET学习笔记:Actor小试

Actor模型是一种避免线程共享数据&#xff0c;相同Actor实体串行化的方案&#xff0c;所以不便dapr的其他功能&#xff0c;几乎都是非编程入侵的&#xff0c;相反&#xff0c;Dapr Acror深度定制的&#xff0c;关于Actor&#xff0c;.net中有一些通用框架&#xff0c;比如Akka.…

黄聪:wordpress如何开启文章格式post format

发现很多“古老”的WordPress主题使用量非常大&#xff0c;虽然部分也在随着WordPress版本的升级而“升级”&#xff0c;只不过是修复了bug而已&#xff0c;wordpress的新特性并没有使用。而且多数国内的wordpress主题制作者&#xff0c;也都是在这些主题的基础上进行创作&…

11没有源码注释_我们为什么要看源码、应该如何看源码?

看源码的意义看源码只是一种方法、手段&#xff0c;而不是目的。我也曾经给自己制定过“阅读xxx源码”的目标&#xff0c;现在看起来真的很蠢&#xff0c;一点不smart&#xff08;specific、measurable、attainable、relevant、time-bound&#xff09;。只有搞清楚了阅读代码的…

如果你没空读书,就一定要来看看这8个公众号!

全世界只有3.14 % 的人关注了爆炸吧知识不管世界变化多块&#xff0c;阅读仍是个不过时的动作。今天就为大家推荐几个优质公众号&#xff0c;从社会热点、读书成长、生活新知&#xff0c;你的碎片化时间&#xff0c;我们包了&#xff01;一起来看看呀~♥长按二维码&#xff0c;…

03Prism WPF 入门实战 - Region

1.概要源码及PPT地址&#xff1a;https://github.com/JusterZhu/wemail视频地址&#xff1a;https://www.bilibili.com/video/BV1KQ4y1C7tg?sharesourcecopyweb&#xff08;1&#xff09;Prism概览Application&#xff1a;我们开发应用程序&#xff0c;初始化Bootstrapper。Bo…

10月Web服务器调查:Apache下降 Ngnix攀升

来自netcraft的消息&#xff0c;在2010年10月份的Web服务器市场调查中&#xff0c;在232,839,963个网站中&#xff0c;仍有69.8%的站点在使用 Apache服务器&#xff0c;相比于上个月&#xff0c;其市场份额增长了大约1个百分点&#xff0c;Ngnix也有较小幅度的增长&#xff0c;…

Python深度学习029:pytorch中常用的模块或方法

PyTorch是一个广泛使用的深度学习库,提供了许多用于构建和训练神经网络的模块和方法。下面是一些PyTorch中常用的模块和方法的简要介绍: PyTorch常用模块和方法 torch 用途:PyTorch的基础模块,提供了多种数学运算功能。常用方法: torch.tensor():创建张量torch.randn():…

【转载】Android设计中的.9.png

转载自&#xff1a;腾讯ISUX (http://isux.tencent.com/android-ui-9-png.html) 在Android的设计过程中&#xff0c;为了适配不同的手机分辨率&#xff0c;图片大多需要拉伸或者压缩&#xff0c;这样就出现了可以任意调整大小的一种图片格式“.9.png”。这种图片是用于Android开…

如果你没空看书,我强烈建议你做这件事!

知乎上有个高赞问题&#xff1a;有哪些书看完后&#xff0c;会让人后悔没早看到&#xff1f;答案各有不一、包罗万象。但有一点&#xff0c;大家达成了共识&#xff1a;要多读书。人生漫长&#xff0c;而我们都不会是一成不变的&#xff0c;真正决定人与人之间的差距的&#xf…

为什么应该在业务层实现管道模式,而不用ASP.NET Core Middleware实现 | 2点原因和实现方式...

前言ASP.NET Core的Middleware&#xff08;中间件&#xff09;就是使用了管道模式&#xff1a;Request&#xff08;请求&#xff09;在管道中传递&#xff0c;依次经过管道中的每一个MiddleWare进行处理。MiddleWare就像一层层的“滤网”&#xff0c;过滤所有的请求和响应。这种…

缓存在哪里_什么是MyBatis缓存技术

MyBatis缓存引言在一个Web项目中&#xff0c;查询数据库中的操作算是一个非常常用的操作&#xff0c;但是有些数据会被经常性的查询&#xff0c;而每一次都去数据库中查询这些重复的数据&#xff0c;会很消耗数据库的资源&#xff0c;同时使得查询效率也很低&#xff0c;而 MyB…

WPF开发登录窗口之——窗口布局

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织01—代码如下一、创建项目&#xff0c;命名为LoginWindow&#xff0c;然后创建以下目录结构&#xff1a;二、导入图片三、创建资源字典。一共创建四个&#xff1a;ButtonStyle、WindowStyle、Text…

这个偏僻的小山村竟出了12位博士28位硕士,高产“学霸”背后原因曝光......

全世界只有3.14 % 的人关注了爆炸吧知识考上大学留名祖宗祠堂今早&#xff0c;超模君刷微博的时候&#xff0c;有一则新闻吓得我虎躯一震——一个总共才2000多人小山村&#xff0c;竟然出了12位博士28位硕士。而且考上大学的孩子&#xff0c;他们的名字直接刻进祖宗祠堂。(微博…

牛顿新定律:凭本事得到的,凭什么要还?

后记事后&#xff0c;超模君提出用上帝开过光的真苹果来换回自己的苹果手机&#xff0c;但是惨遭牛顿君拒绝&#xff0c;理由是苹果手机更能激发他的创作灵感……面对这种鬼话&#xff0c;超模君敢怒不敢言。更惨的是&#xff0c;上帝说苹果手机不报销……艾萨克牛顿&#xff0…

04Prism WPF 入门实战 - Module

1.概要源码及PPT地址&#xff1a;https://github.com/JusterZhu/wemail视频地址&#xff1a;https://www.bilibili.com/video/BV1KQ4y1C7tg?sharesourcecopywebModule&#xff0c;具有特定功能&#xff0c;且独立存在则称为成为模块。下图为Prism体系中的关系结构图。在Prism体…

虚拟机(VMware Workstation)中,把连接网络的模式由“NAT模式”,改成“自动桥接模式”,网速大大的提升...

安装虚拟机&#xff0c;默认情况下&#xff0c;联网的模式是NAT&#xff0c;即跟主机是转发共用网络资源的&#xff0c;这样就非常慢&#xff0c;时常网页都打不开&#xff0c;现把它改成桥接模式&#xff0c;让它独立成为一台物理机&#xff0c;网速有大大的改善&#xff0c;设…