P2419 [USACO08JAN]牛大赛Cow Contest(dfs走天下/)
题目描述
FJ的N(1 <= N <= 100)头奶牛们最近参加了场程序设计竞赛:)。在赛场上,奶牛们按1..N依次编号。每头奶牛的编程能力不尽相同,并且没有哪两头奶牛的水平不相上下,也就是说,奶牛们的编程能力有明确的排名。 整个比赛被分成了若干轮,每一轮是两头指定编号的奶牛的对决。如果编号为A的奶牛的编程能力强于编号为B的奶牛(1 <= A <= N; 1 <= B <= N; A != B) ,那么她们的对决中,编号为A的奶牛总是能胜出。 FJ想知道奶牛们编程能力的具体排名,于是他找来了奶牛们所有 M(1 <= M <= 4,500)轮比赛的结果,希望你能根据这些信息,推断出尽可能多的奶牛的编程能力排名。比赛结果保证不会自相矛盾。
输入输出格式
输入格式:
第1行: 2个用空格隔开的整数:N 和 M
第2..M+1行: 每行为2个用空格隔开的整数A、B,描述了参加某一轮比赛的奶 牛的编号,以及结果(编号为A,即为每行的第一个数的奶牛为 胜者)
输出格式:
第1行: 输出1个整数,表示排名可以确定的奶牛的数目
输入输出样例
5 5
4 3
4 2
3 2
1 2
2 5
2
说明
输出说明:
编号为2的奶牛输给了编号为1、3、4的奶牛,也就是说她的水平比这3头奶
牛都差。而编号为5的奶牛又输在了她的手下,也就是说,她的水平比编号为5的
奶牛强一些。于是,编号为2的奶牛的排名必然为第4,编号为5的奶牛的水平必
然最差。其他3头奶牛的排名仍无法确定。
dfs算法
很自然的就可以想到dfs去找每一个点的打得过的点和打不过的所有点,打标记,如果所有点都被标记了,
就可以知道这个点的排名。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn = + ;
const int maxm= + ;
int n,m;
int ans;
int bj[maxn];//1:比我强,2:比我弱;
int map[maxm][maxm];//1:前战胜后;2:后输于前;
void dfs1(int pos)
{
if(bj[pos]==) return ;
for(int i=;i<=n;i++)
{
if(map[pos][i]== && !bj[i])
{
bj[i]=;
dfs1(i);
}
}
}
void dfs2(int pos)
{
if(bj[pos]==) return ;
for(int i=;i<=n;i++)
{
if(map[pos][i]== &&!bj[i])
{
bj[i]=;
dfs2(i);
}
}
}
int main()
{
cin>>n>>m;
for(int i=;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
map[a][b]=;
map[b][a]=;
}
for(int i=;i<=n;i++){
int c=;
memset(bj,,sizeof(bj));
bj[i]=; for(int j=;j<=n;j++)
if(j!=i)
{
if(map[i][j]==)
{
bj[j]=;
dfs1(j);
} if(map[i][j]==)
{
bj[j]=;
dfs2(j);
}
}
// for(int j=1;j<=n;j++) cout<<bj[j]<<" ";
// cout<<endl;
for(int j=;j<=n;j++)
{
if(j!=i)
if(!bj[j]){c=;break;}
}
if(c==) ans++;
}
printf("%d\n",ans);
return ;
}
floyed算法
floyed不仅能求任意两点的最短路,还能求一个点能否到另一个点。
f[i][j]=f[i][j]|(f[i][k]&f[k][j])表示i能否走到j,即要么一开始i能到j,要么i能到k,k再能到j。
那么这里表示的是i能否赢j。用floyed求出每个点与个点的关系,只要这个点和其他
n-1个点的关系都确定了,就能确定他的排名。
#include<iostream>
#include<cstdio>
using namespace std;
int a,b,n,m,f[][],ans;
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&a,&b);
f[a][b]=;
}
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
f[i][j]=f[i][j]|f[i][k]&f[k][j];//要么是f[i][j]中间本来就联通,或者从i到k并且从k到j都联通,如果两种情况都不是,就不连通
for(int i=;i<=n;i++)
{
int c=;
for(int j=;j<=n;j++)
if(i==j)continue;
else
c=c&(f[i][j]|f[j][i]);//统计得数
ans+=c;
}
printf("%d\n",ans);
}
P2419 [USACO08JAN]牛大赛Cow Contest(dfs走天下/)的更多相关文章
- bzoj1612 / P2419 [USACO08JAN]牛大赛Cow Contest(Floyd)
		
P2419 [USACO08JAN]牛大赛Cow Contest Floyd不仅可以算最短路,还可以处理点之间的关系. 跑一遍Floyd,处理出每个点之间是否有直接或间接的关系. 如果某个点和其他$n ...
 - P2419 [USACO08JAN]牛大赛Cow Contest
		
P2419 [USACO08JAN]牛大赛Cow Contest 题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently number ...
 - Luogu P2419 [USACO08JAN]牛大赛Cow Contest
		
题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a p ...
 - 洛谷 P2419 [USACO08JAN]牛大赛Cow Contest
		
题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a p ...
 - 洛谷—— P2419 [USACO08JAN]牛大赛Cow Contest
		
https://www.luogu.org/problem/show?pid=2419 题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, convenie ...
 - floyd的魔改应用——洛谷P2419 [USACO08JAN]牛大赛Cow Contest 题解
		
想找原题请点击这里:传送门 原题: 题目背景 [Usaco2008 Jan] 题目描述 N ( ≤ N ≤ ) cows, conveniently numbered ..N, are partici ...
 - 洛谷P2419 [USACO08JAN]牛大赛Cow Contest
		
对于一个能够确定名次的点,可以注意到,对于该点,入度和出度的数量加起来等于N-1(这样还是不够准确的确切的说是,能够到达这个点的数量和这个点能够到达的数量的和 floyd不仅可以求两个点之间的最短路径 ...
 - luogu题解 P2419 【牛大赛Cow Contest】传递丢包
		
题目链接: https://www.luogu.org/problemnew/show/P2419 分析: "在交际网络中,给定若干元素和若干对二元关系,且关系具有传递性. 通过传递性推导出 ...
 - Floyd--P2419 [USACO08JAN]牛大赛Cow Contest
		
*传送 FJ的N(1 <= N <= 100)头奶牛们最近参加了场程序设计竞赛:).在赛场上,奶牛们按1..N依次编号.每头奶牛的编程能力不尽相同,并且没有哪两头奶牛的水平不相上下,也就是 ...
 
随机推荐
- 关于Eclipse使用Git基础篇
			
一:Git的下载与安装与基本使用 1.打开eclipse->help->Eclipse Markplace->search->fiind输入Egit 你会看到如下截图(我的为已 ...
 - model中的一些处理
			
3.setting.py中设置 主要有三个地方需要设置: MEDIA_URL = ‘/media/’,设置该路径为了在模板中定位图片的位置,<img src="{{ MEDIA_URL ...
 - 快速沃尔什变换(FWT)及K进制异或卷积&快速子集变换(FST)讲解
			
前言: $FWT$是用来处理位运算(异或.与.或)卷积的一种变换.位运算卷积是什么?形如$f[i]=\sum\limits_{j\oplus k==i}^{ }g[j]*h[k]$的卷积形式(其中$\ ...
 - passat product list
			
s end
 - Angular记录(8)
			
文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...
 - HBase RowKey与索引设计
			
1. HBase的存储形式 hbase的内部使用KeyValue的形式存储,其key时rowKey:family:column:logTime,value是其存储的内容. 其在region内大多以升序 ...
 - java压缩文件或文件夹并导出
			
java压缩文件或文件夹并导出 tozipUtil: package com.zhl.push.Utils; import java.io.File; import java.io.FileInput ...
 - MySQL8.0
			
序言 my.ini [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=D:\\DataBase\\mysql-8.0.12-winx64 # 设 ...
 - mix-blend-mode
			
mix-blend-mode是一个css3新增的混合color与背景元素颜色的样式,同一个元素的两个颜色不影响. mix-blend-mode: normal; //正常mix-bl ...
 - 【bzoj 2159】Crash 的文明世界
			
Description Crash小朋友最近迷上了一款游戏——文明5(Civilization V).在这个游戏中,玩家可以建立和发展自己的国家,通过外交和别的国家交流,或是通过战争征服别的国家.现在 ...