Gym 101142C :CodeCoder vs TopForces(强连通算法)
2024-09-04 18:15:12
题意:N个人,每个人有a属性和b属性,如果一个人的a或者b大于另外一个人,我们说这个人可以打败那个人。且这种关系可以传递。对于每个人,输出他可以打败多少人。(保证每个a不相同,保证每个b不相同。
思路:对于a关系,我们按重小到大连边,b同理。然后每个点能到的点就是可以打败的点。即是缩点后乱搞。
(此题是图,而不是排序后的数据结构题。
#include<bits/stdc++.h>
#define pii pair<int,int>
#define F first
#define S second
using namespace std;
const int maxn=;
vector<int>G1[maxn],G2[maxn];
pii p1[maxn],p2[maxn];
int dfn[maxn],low[maxn],scc[maxn],scc_cnt,sz[maxn],ind[maxn];
int q[maxn],head,tail,times,ans[maxn],res[maxn],instk[maxn];
map<pii,int>mp;
void tarjan(int u)
{
instk[u]=; q[++head]=u;
dfn[u]=low[u]=++times;
for(int i=;i<G1[u].size();i++){
int v=G1[u][i];
if(!dfn[v]) {
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(instk[v])low[u]=min(low[u],dfn[v]);//无向图与有向图的区别
}
if(dfn[u]==low[u]){
scc_cnt++;
while(true){
int x=q[head--];
scc[x]=scc_cnt; sz[scc_cnt]++;
instk[x]=;
if(x==u) break;
}
}
}
int main()
{
int N,i,j;
scanf("%d",&N);
for(i=;i<=N;i++) scanf("%d%d",&p1[i].F,&p2[i].F),p1[i].S=p2[i].S=i;
sort(p1+,p1+N+);
sort(p2+,p2+N+);
for(i=;i<=N;i++) G1[p1[i].S].push_back(p1[i-].S);
for(i=;i<=N;i++) G1[p2[i].S].push_back(p2[i-].S);
for(i=;i<=N;i++) if(!dfn[i]) tarjan(i);
for(i=;i<=N;i++){
int L=G1[i].size();
for(j=;j<L;j++){
if(scc[i]!=scc[G1[i][j]]&&!mp[make_pair(scc[G1[i][j]],scc[i])]) mp[make_pair(scc[G1[i][j]],scc[i])]=,G2[scc[G1[i][j]]].push_back(scc[i]),ind[scc[i]]++;
}
}
head=tail=;
for(i=;i<=scc_cnt;i++) if(ind[i]==) q[++head]=i;
while(tail<head){
int u=q[++tail];
int L=G2[u].size();
for(j=;j<L;j++){
sz[G2[u][j]]+=sz[u];
if((--ind[G2[u][j]])==) q[++head]=G2[u][j];
}
}
for(i=;i<=N;i++) printf("%d\n",sz[scc[i]]-);
return ;
}
最新文章
- flex进行页面的基础布局
- 查看centos版本号
- 隐写-CTF中图片隐藏文件分离方法总结
- HTML5播放器实例
- Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据
- 真人动作捕捉系统 for Unity
- 安全增强 Linux (SELinux) 剖析
- C++三种内存分配方式
- 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)
- NGUI-学习笔记(2)一个项目需求
- MYSQL查询计划KEY_LEN
- Android Studio学习随笔-基本事件(点击)
- nginx、fastCGI、php-fpm关系梳理(转载参考)
- linux下so动态库一些不为人知的秘密(中)
- wsgi-restful-routes具体解释:
- UE4使用widget创建UI界面播放视频
- 10种linux下磁盘快照方式恢复系统
- mac打开文件提示文件已经坏了的修改
- STM32F10X-定时器/计数器
- WebAPI 抛出HttpResponseException异常
热门文章
- MongoDB可视化工具 Studio 3T
- Entity Framework(1)——Connections and Models
- poj1066(叉乘的简单应用)
- IntelliJ IDEA集成JProfiler,入门教程
- php自定义函数: 遍历文件夹及其子文件夹
- 我的Android进阶之旅------>关于调用Webservice查询火车票时刻表的几个接口介绍
- php验证复选框的小例子
- Data Structure Array: Maximum circular subarray sum
- 2018svn1
- 【leetcode刷题笔记】Longest Valid Parentheses