vijos P1021,P1022,p1023 Victoria的舞会1,2,3题解
来源:互联网 发布:虚拟机上安装linux 编辑:程序博客网 时间:2024/05/29 18:01
Victoria的舞会1:
Description
Input
Output
Sample Input
Sample Output
#include<stdio.h> int main() { int s,n,k,x,ans=0,i; scanf("%d%d",&n,&k); for(i=1;i<=n;i++){ x=0; while(scanf("%d",&s)==1&&s!=0) x++; if(x>=k) ans++; } printf("%d",ans); }
Victoria的舞会2:
这个就需要强联通分量个数.
Description
Victoria是一位颇有成就的艺术家,他因油画作品《我爱北京天安门》闻名于世界。现在,他为了报答帮助他的同行们,准备开一个舞会。
Victoria准备邀请n个已经确定的人,可是问题来了:
这n个人每一个人都有一个小花名册,名册里面写着他所愿意交流的人的名字。比如说在A的人名单里写了B,那么表示A愿意与B交流;但是B的名单里不见得有A,也就是说B不见得想与A交流。但是如果A愿意与B交流,B愿意与C交流,那么A一定愿意与C交流。也就是说交流有传递性。
Victoria觉得需要将这n个人分为m组,要求每一组的任何一人都愿意与组内其他人交流。并求出一种方案以确定m的最小值是多少。
注意:自己的名单里面不会有自己的名字。
Input
第一行一个数n。接下来n行,每i+1行表示编号为i的人的小花名册名单,名单以0结束。1< =n< =200。
Output
一个数,m。
Sample Input
Sample Output
#include<stdio.h>int n;int idx;int low[401];int deep[401];int z[401];int top,tot;int v[401];int inz[401];int f[401][401];int a[401][401],ans;int min(int x,int y){if(x>y)return y;return x;}void tarjan(int x){ z[++top]=x;v[x]=1;inz[x]=1; deep[x]=low[x]=++tot; for(int i=1;i<=n;i++) if(a[x][i]==1) { if(v[i]==0) tarjan(i),low[x]=min(low[x],low[i]); else if(inz[i]==1) low[x]=min(low[x],deep[i]); } if(deep[x]==low[x]) { ans++; int t; do { t=z[top--],inz[t]=0; f[ans][++f[ans][0]]=t; }while(t!=x); }}int main(){int b,c,m;scanf("%d",&n);for(int i=1;i<=n;i++){while(scanf("%d",&b)==1){if(b!=0)a[i][b]=1;elsebreak;}} for(int i=1;i<=n;i++) if(!deep[i]) tarjan(i);printf("%d",ans);}
Victoria的舞会3:
此题需要求缩点
Description
Victoria是一位颇有成就的艺术家,他因油画作品《我爱北京天安门》闻名于世界。现在,他为了报答帮助他的同行们,准备开一个舞会。
Victoria准备邀请n个已经确定的人,可是问题来了:
这n个人每一个人都有一个小花名册,名册里面写着他能够通知到的人的名字。比如说在A的人名单里写了B,那么表示A能够通知到B;但是B的名单里不见得有A,也就是说B不见得通知到A。
Victoria觉得需要确定自己需要通知多少个人m,能够实际将所有人n都通知到。并求出一种方案以确定m的最小值是多少。
注意:自己的名单里面不会有自己的名字。Victoria可以自身通知到所有n个人。
Input
第一行一个数n。接下来n行,每i+1行表示编号为i的人的小花名册名单,名单以0结束。1< =n< =200。
Output
一个数,m。
Sample Input
Sample Output
#include<stdio.h>int head[201];int to[401],n;int next[401];int idx;int low[401];int deep[401];int z[401];int top,tot;int v[401];int inz[401];int f[401][401];int a[401][401],ans;int belong[401];int du[401];int min(int x,int y){if(x>y)return y;return x;}void tarjan(int x){ z[++top]=x;v[x]=1;inz[x]=1; deep[x]=low[x]=++tot; for(int i=1;i<=n;i++) if(a[x][i]==1) { if(v[i]==0) tarjan(i),low[x]=min(low[x],low[i]); else if(inz[i]==1) low[x]=min(low[x],deep[i]); } if(deep[x]==low[x]) { ans++; int t; do { t=z[top--],inz[t]=0; f[ans][++f[ans][0]]=t; }while(t!=x); }}int main(){int b,c,m,cnt=0;scanf("%d",&n);for(int i=1;i<=n;i++){while(scanf("%d",&b)==1){if(b!=0)a[i][b]=1;elsebreak;}} for(int i=1;i<=n;i++) if(!deep[i]) tarjan(i);for(int i=1;i<=ans;i++)for(int j=1;j<=f[i][0];j++)belong[f[i][j]]=i; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(a[i][j]==1&&belong[i]!=belong[j])du[belong[j]]++; } for(int i=1;i<=ans;i++) if(du[i]==0) cnt++;printf("%d",cnt);}
- vijos P1021,P1022,p1023 Victoria的舞会1,2,3题解
- [Vijos P1022]Victoria的舞会2 Tarjan
- 【vijos】P1022 Victoria的舞会2
- Vijos-P1021 Victoria的舞会1
- |Vijos|贪心|P1021 Victoria的舞会1
- Vijos P1021 Victoria的舞会1
- 【最短路】Vijos P1022 Victoria的舞会2
- 【图论+贪心】 Vijos P1021 Victoria的舞会1
- VIJOS p1023 Victoria的舞会3 终于AC了!!!
- |Vijos|图论强连通分量|P1023 Victoria的舞会3
- Vijos Victoria的舞会3
- Vijos 1021题:Victoria的舞会1
- 【强连通】Victoria的舞会2 -- Vijos 1022,1023
- vijos 1002 Victoria的舞会2 强连通分量
- Victoria的舞会1
- vijos1023 Victoria的舞会3
- Vijos1022. Victoria的舞会2
- tarjan题目(1)Victoria的舞会2
- web中解决乱码问题&&重定向和请求转发区别
- 数据库那点事(Mysql)-后续
- Boolean Expressions
- UVA 12563 Jin Ge Jin Qu hao(多阶段决策问题,DP)
- 网络编程之编写简易监控网卡流量
- vijos P1021,P1022,p1023 Victoria的舞会1,2,3题解
- Unity中运用MySql代码
- ASP.NET介绍
- 2017icpc北京赛区网络赛E题(计算几何)
- nyoj 1185 线段树区间最大最小值
- wind10 安装oracle11gR2 出现ins13001 环境不满足最低要求
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
- 浅谈网站推广
- springboot+gradle集成redis实现动态存储值