re: 閑來切題 呵呵 oyjpart 2008-06-26 11:22
Contact me via POJ mail : alpc12
email(MSN also) : yescrystalblue@sina.com
re: 閑來切題 呵呵 oyjpart 2008-06-23 22:22
1724 roads的代碼:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int N = 101;
struct Node {int x, w, f; void set(int xx, int ww, int ff) {x = xx; w = ww; f = ff;} };
vector<Node> adj[N][N];
int money, nv, ne;
bool operator<(const Node& a, const Node& b) { return a.w > b.w; }
void solve() {
int x, i, j, y;
priority_queue<Node> pq;
Node now, cur;
now.set(0, 0, 0);
pq.push(now);
while(!pq.empty()) {
cur = pq.top();
pq.pop();
x = cur.x;
if(x == nv-1) {
printf("%d\n", cur.w);
return;
}
for(i = 0; i < nv; ++i) {
for(j = 0; j < adj[x][i].size(); j++) if(cur.f + adj[x][i][j].f <= money) {
y = adj[x][i][j].x;
now.set(y, cur.w + adj[x][i][j].w, cur.f + adj[x][i][j].f);
pq.push(now);
}
}
}
printf("-1\n");
}
int main() {
int i, u, v, w, f;
Node now;
scanf("%d %d %d", &money, &nv, &ne);
for(i = 0; i < ne; ++i) {
scanf("%d %d %d %d", &u, &v, &w, &f);
--u; --v;
now.set(v, w, f);
adj[u][v].push_back(now);
}
solve();
return 0;
}
re: 基本參數搜索 oyjpart 2008-06-11 22:19
@ 小Young
就是廣搜用的隊列
不用隊列你的意思是深搜么?
re: 基本參數搜索 oyjpart 2008-06-10 12:03
@richardxx
呵呵 進復賽了就可以了不 看我們這種初賽就被水掉的菜菜。。
re: 基本參數搜索 oyjpart 2008-06-04 14:56
你可以參考《算法藝術與信息學競賽》303-304頁
3.地震--最有比率生成樹 一節的解答
和這個非常類似
就是2分枚舉那個答案,然后將除的表達式的權 轉化成+-*表達式的權,再這個基礎上求目標函數。 如果目標函數 != 0,則枚舉的答案應該向使目標函數更接近0的方向取值,
go函數實際求的就是最大權的hamilton回路。用的是基本的壓縮狀態廣搜。
re: 08年中南賽--失意后的反思 oyjpart 2008-06-03 17:42
@DenoFiend
呵呵 搞ACM的喜歡自己感慨下子
re: 這樣的生活 oyjpart 2008-06-03 15:32
@richardxx
現在用這個“窘”字的人真少
@true
沒看懂啊....享受啥?
re: [轉]女人常說的32句謊話及詳解... oyjpart 2008-05-28 23:10
呵呵
這個就要自己品味了...
因為 我老婆也要看我博客的 哈哈
每條邊拆成2條邊 。 然后對每條邊設一個DP值。
比如邊A->B. B連接的其他點的集合叫做S(S中去掉A)
dp[A->B] = Min(Capacity[A->B], 加合(dp[B->Ci]));
可以通過2次DFS來求出這些DP值。第一次求出一個方向的邊的DP值,再一次求出反向。
試著畫個圖來理解吧:)
re: pku1769 新寫的線段樹(點樹)模版 oyjpart 2008-04-18 12:19
題目是有這樣的要求的:
要求選定的子集是按照題目給的序來覆蓋。
嘿嘿 如果我沒有理解錯你的意思的話
re: 閑來切題 呵呵 oyjpart 2008-04-16 13:16
你參考下源代碼吧,如果還WA,我們QQ說。 :)
#include <stdio.h>
#include <string.h>
const int N = 1010;
const int T = 2520;
const int MAXINT = 123456789;
int n;
int u[N], d[N];
bool dp[2][N];
int gcd[11][11];
int GCD(int a, int b) {
if(a < b) return GCD(b, a);
while(b != 0) {
int t = b;
b = a % b;
a = t;
}
return a;
}
inline int LCM(int a, int b) {
return a * b / GCD(a, b);
}
bool ok(int time, int i) {
int t = time % (u[i] + d[i]);
if(t == 0 || t > u[i]) return false;
return true;
}
int main() {
int ntc, i, t, j;
scanf("%d", &ntc);
while(ntc--) {
scanf("%d", &n);
int lcm = 1;
u[0] = u[n+1] = MAXINT; d[0] = d[n+1] = 0;
for(i = 1; i <= n; ++i) {
scanf("%d %d", &u[i], &d[i]);
lcm = LCM(lcm, u[i] + d[i]);
}
n += 2;
memset(dp, false, sizeof(dp));
dp[0][0] = 1;
for(t = 1; t <= lcm; ++t) {
int now = t % 2;
memset(dp[now], false, sizeof(dp[now]));
for(i = 0; i < n; ++i) if(ok(t, i)) {
for(j = i-5; j <= i+5; j++) if(j >= 0 && j < n) {
if(dp[!now][j]) { dp[now][i] = 1; break; }
}
}
if(dp[now][n-1]) { printf("%d\n", t); break; }
}
if(t > lcm) printf("NO\n");
}
return 0;
}
re: 蔡蕾(male)的20個問答 oyjpart 2008-03-05 21:53
強調下 alpc55就是蔡蕾
再強調下 是男性
哈哈~~~
re: pku1769 新寫的線段樹(點樹)模版 oyjpart 2008-01-18 12:40
你的樣例是無解的,沒有線段覆蓋【0,10】的區間。