题目传送门

 /*
题意:给一张图和一些有向边,问如何给边赋值使得d1 < d2 < .. < dx > ,,,< ddn
贪心:左边从2开始,右边从n开始,每次选择未标记且相连的点加入树,加入时间就是d[i],若不在树上的输出n,注意重边和重点
*/
/************************************************
* Author :Running_Time
* Created Time :2015-8-13 12:09:17
* File Name :F.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 3e5 + ;
const int MAXM = 6e5 + ;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + ;
vector<int> G[MAXN];
bool vis[MAXN];
int fa[MAXN];
int d[MAXN];
int u[MAXN], v[MAXN];
int n, m; void mark(int u) {
for (int i=; i<G[u].size (); ++i) {
int v = G[u][i];
if (fa[v] || vis[v]) continue;
fa[v] = u;
}
} void work(void) {
memset (d, , sizeof (d));
memset (fa, , sizeof (fa));
memset (vis, false, sizeof (vis));
int l = , r = n, now = ;
fa[] = ; vis[] = true; mark ();
while (l <= r) {
if (fa[l]) {
mark (l); vis[l] = true;
d[l] = ++now; l++; continue;
}
if (fa[r]) {
mark (r); vis[r] = true;
d[r] = ++now; r--;
}
} for (int i=; i<=m; ++i) {
if (fa[v[i]] != u[i]) printf ("%d\n", n);
else printf ("%d\n", abs (d[u[i]] - d[v[i]]));
}
} int main(void) { //HDOJ 5385 The Path
int T; scanf ("%d", &T);
while (T--) {
scanf ("%d%d", &n, &m);
for (int i=; i<=n; ++i) G[i].clear ();
for (int i=; i<=m; ++i) {
scanf ("%d%d", &u[i], &v[i]);
G[u[i]].push_back (v[i]);
}
work ();
} return ;
}

最新文章

  1. Ubuntu添加开机自动启动程序方法
  2. Mongodb profile(慢查询日志)
  3. 【Maven】运行项目
  4. java向Excel文件写入数据
  5. html和css的编码规范
  6. apk反编译、smali修改、回编译笔记
  7. 随笔—邀请赛前训— Codeforces Round #330 (Div. 2) B题
  8. winform调用浏览器
  9. Java基础(36):String与基本数据类型之间的双向转换(Wrapper类)
  10. onclick事件分析
  11. HDU 3709 Balanced Number (数位DP)
  12. DB2执行脚本
  13. ubuntu下 使用AB做压力测试
  14. Raw qcow qcow2 vhd-vpc虚拟磁盘格式间相互转换
  15. Cocos2d-x 3.1.1 学习日志14--CocosStudio学习必看
  16. 多线程学习之三生产者消费者模式Guarded Suspension
  17. MongoDB基础之一:Conetos下安装MongoDB
  18. ThinkPHP中处理验证码的问题
  19. Linux查看日志常用命令
  20. 深入 Java Web

热门文章

  1. 【APUE】关于信号的一些常用函数
  2. Linux 下使用 Sar 简介
  3. Android Activity与远程Service的通信学习总结
  4. CodeForces 567C. Geometric Progression(map 数学啊)
  5. js可视区域图片懒加载
  6. Codeforces 709E. Centroids 树形DP
  7. mysql 5.5安装不对容易出现问题
  8. JDBC连接数据库查询信息的步骤(提取成配置文件方式)
  9. Delphi中accesss实现树形结构查询系统(一次性生成比较方便)
  10. HR-部门内部调动报表