贪心 HDOJ 5385 The Path
2024-09-30 14:44:04
/*
题意:给一张图和一些有向边,问如何给边赋值使得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 ;
}
最新文章
- Ubuntu添加开机自动启动程序方法
- Mongodb profile(慢查询日志)
- 【Maven】运行项目
- java向Excel文件写入数据
- html和css的编码规范
- apk反编译、smali修改、回编译笔记
- 随笔—邀请赛前训—	Codeforces Round #330 (Div. 2) B题
- winform调用浏览器
- Java基础(36):String与基本数据类型之间的双向转换(Wrapper类)
- onclick事件分析
- HDU 3709 Balanced Number (数位DP)
- DB2执行脚本
- ubuntu下 使用AB做压力测试
- Raw qcow qcow2 vhd-vpc虚拟磁盘格式间相互转换
- Cocos2d-x 3.1.1 学习日志14--CocosStudio学习必看
- 多线程学习之三生产者消费者模式Guarded Suspension
- MongoDB基础之一:Conetos下安装MongoDB
- ThinkPHP中处理验证码的问题
- Linux查看日志常用命令
- 深入 Java Web