hdu-5385
来源:互联网 发布:魔法王座升阶数据图片 编辑:程序博客网 时间:2024/05/05 19:20
贪心的做:
1.把与1相连的节点加入集合
2.clock递增可以保证中间的点到1节点的距离最大
3.分别从2和n在集合中开始找,在把与找到的点相连且不在集合中的点加入集合中
#include<cstdio>#include<cstring>#include<cmath>#include<vector>#include<queue>#include<algorithm>#include<iostream>#include<set>using namespace std;#define clr(a,b) memset(a,b,sizeof(a))const int INF=~(1<<(sizeof(int )*8-1));typedef long long LL;#define MAXE 100100#define MAXN 100100struct node{ int to,next;}e[2*MAXE],sav[MAXE];int head[MAXN],e_num,clock;void add(int u,int v){ e[e_num]=(node){v,head[u]};head[u]=e_num++;}int n,m;int dis[MAXN],fa[MAXN],l,r;int main(){ //freopen("in","r",stdin); int T; scanf("%d",&T); while(T--) { e_num=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { head[i]=-1; fa[i]=0; } for(int i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); sav[i]=(node){u,v}; add(u,v); } fa[1]=-1; for(int i=head[1];i>=0;i=e[i].next) { int v=e[i].to; if(!fa[v]) fa[v]=1; } dis[1]=clock=0; l=2,r=n; while(l<=r) { if(fa[l]) { for(int i=head[l];i>=0;i=e[i].next) { int v=e[i].to; if(!fa[v]) { fa[v]=l; } } dis[l]=++clock; l++; } else if(fa[r]){ for(int i=head[r];i>=0;i=e[i].next) { int v=e[i].to; if(!fa[v]) { fa[v]=r; } } dis[r]=++clock; r--; } } for(int i=1;i<=m;i++) { int u=sav[i].to; int v=sav[i].next; if(fa[v]!=u) printf("%d\n",n); else printf("%d\n",dis[v]-dis[u]); } } return 0;}
0 0
- HDU 5385
- hdu-5385
- HDU 5385 The path
- hdu 5385 The path
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- Python模拟登陆大连交通大学教务在线
- 关于char越界的简单c
- iOS中uiimage和uicolor相互转化
- 设计模式: 自己手动写一个状态模式
- Spring常见面试题目
- hdu-5385
- MySQL互为主从复制以及主主互备
- WM_CLOSE、WM_DESTROY、WM_QUIT区别
- 免费的java(jsp)虚拟主机jhost
- B树的基本例程(1)插入
- uva 11374 Airport Express 机场快线 迪杰斯特拉算法
- 功率与dbm关系
- C# 画图
- 【贪心算法】Huffman Tree