Skip to content

Commit 1370192

Browse files
committed
SGU updated
1 parent ec8a4b3 commit 1370192

20 files changed

+1202
-0
lines changed

SGU/148.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include <iostream>
2+
#include <cstdio>
3+
#include <queue>
4+
#include <algorithm>
5+
6+
using namespace std;
7+
8+
const int N = 15011;
9+
10+
int W[N], L[N], P[N];
11+
int sp[N];
12+
13+
int main () {
14+
int i, j, k;
15+
int m;
16+
scanf ("%d", &m);
17+
for (i = 1; i <= m; ++i) {
18+
scanf ("%d%d%d", &W[i], &L[i], &P[i]);
19+
sp[i] = sp[i - 1] + W[i];
20+
}
21+
22+
priority_queue<pair<int,int> > pq;
23+
int s = 0, best = P[m], ans = m;
24+
for (i = m; i >= 1; --i) {
25+
while (!pq.empty ()) {
26+
int u = pq.top ().first, id = pq.top ().second;
27+
if (u > sp[i - 1]) {
28+
s -= P[id];
29+
pq.pop ();
30+
}
31+
else break;
32+
}
33+
s += P[i];
34+
if (s < best) {
35+
best = s;
36+
ans = i;
37+
}
38+
pq.push ({sp[i] - L[i], i});
39+
}
40+
for (i = ans; i <= m; ++i) if (sp[i] - sp[ans - 1] <= L[i])
41+
printf ("%d\n", i);
42+
return 0;
43+
}

SGU/148_MLE.java

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import java.io.*;
2+
import java.util.*;
3+
import java.math.*;
4+
5+
6+
public class Solution {
7+
class P implements Comparable <P>{
8+
int v, id;
9+
P () {}
10+
P (int v, int id) {
11+
this.v = v;
12+
this.id = id;
13+
}
14+
public int compareTo (P e) {
15+
return e.v - this.v;
16+
}
17+
}
18+
final static int N = 15011;
19+
20+
void SGU149 () {
21+
int [] W = new int [N];
22+
int [] L = new int [N];
23+
int [] P = new int [N];
24+
int [] sp = new int [N];
25+
int m, i;
26+
@SuppressWarnings("resource")
27+
Scanner in = new Scanner (new BufferedInputStream (System.in));
28+
m = in.nextInt ();
29+
sp[0] = 0;
30+
for (i = 1; i <= m; ++i) {
31+
W[i] = in.nextInt(); L[i] = in.nextInt();
32+
P[i] = in.nextInt();
33+
sp[i] = sp[i - 1] + W[i];
34+
}
35+
int ans = m, best = P[m];
36+
PriorityQueue<P> pq = new PriorityQueue<P> ();
37+
int s = 0;
38+
for (i = m; i >= 1; --i) {
39+
while (!pq.isEmpty()) {
40+
P u = pq.peek();
41+
if (u.v > sp[i-1]) {
42+
s -= P[u.id];
43+
pq.poll ();
44+
}
45+
else break;
46+
}
47+
s += P[i];
48+
if (s < best) {
49+
best = s;
50+
ans = i;
51+
}
52+
pq.add(new P(sp[i] - L[i], i));
53+
}
54+
for (i = ans; i <= m; ++i)
55+
if (sp[i] - sp[ans - 1] <= L[i])
56+
System.out.printf ("%d\n", i);
57+
}
58+
public static void main(String[] args) {
59+
Solution lebesgue = new Solution ();
60+
lebesgue.SGU149 ();
61+
}
62+
}

SGU/149.cpp

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#include <iostream>
2+
#include <cstdio>
3+
#include <algorithm>
4+
#include <vector>
5+
#include <queue>
6+
7+
using namespace std;
8+
9+
const int N = 10011;
10+
11+
vector<pair<int, int> >a[N];
12+
int disx[N], disy[N], dis[N], n;
13+
bool st[N];
14+
int x, y, mx, my;
15+
16+
int main () {
17+
int i, j, k;
18+
queue<int> q;
19+
//freopen ("in", "r", stdin);
20+
21+
scanf ("%d", &n);
22+
for (i = 2; i <= n; ++i) {
23+
scanf ("%d%d", &j, &k);
24+
a[i].push_back ({j, k});
25+
a[j].push_back ({i, k});
26+
}
27+
fill (dis, dis + n + 1, -1);
28+
fill (disx, disx + n + 1, -1);
29+
fill (disy, disy + n + 1, -1);
30+
31+
mx = my = -1; x = y = 1;
32+
q.push (1); dis[1] = 0;
33+
while (!q.empty ()) {
34+
int u = q.front (); q.pop ();
35+
k = a[u].size ();
36+
for (j = 0; j < k; ++j) {
37+
int v = a[u][j].first, w = a[u][j].second;
38+
if (dis[v]==-1) {
39+
dis[v] = dis[u] + w;
40+
if (dis[v] > mx) {
41+
mx = dis[v];
42+
x = v;
43+
}
44+
q.push (v);
45+
}
46+
}
47+
}
48+
49+
q.push (x); disx[x] = 0;
50+
while (!q.empty ()) {
51+
int u = q.front (); q.pop ();
52+
k = a[u].size ();
53+
for (j = 0; j < k; ++j) {
54+
int v = a[u][j].first, w = a[u][j].second;
55+
if (disx[v] == -1) {
56+
disx[v] = disx[u] + w;
57+
if (disx[v] > my) {
58+
my = disx[v];
59+
y = v;
60+
}
61+
q.push (v);
62+
}
63+
}
64+
}
65+
66+
q.push (y); disy[y] = 0;
67+
while (!q.empty ()) {
68+
int u = q.front (); q.pop ();
69+
k = a[u].size ();
70+
for (j = 0; j < k; ++j) {
71+
int v = a[u][j].first, w = a[u][j].second;
72+
if (disy[v] == -1) {
73+
disy[v] = disy[u] + w;
74+
q.push (v);
75+
}
76+
}
77+
}
78+
for (i = 1; i <= n; ++i)
79+
printf ("%d\n", max (disx[i], disy[i]));
80+
return 0;
81+
}
82+
83+
84+
85+

SGU/149_MLE.java

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import java.io.BufferedInputStream;
2+
import java.util.ArrayList;
3+
import java.util.Arrays;
4+
import java.util.LinkedList;
5+
import java.util.Queue;
6+
import java.util.Scanner;
7+
8+
9+
public class Solution {
10+
11+
/**
12+
* @param args
13+
*/
14+
class E {
15+
int x, d;
16+
E (int x, int d) {
17+
this.x = x;
18+
this.d = d;
19+
}
20+
}
21+
22+
public void solve () {
23+
Scanner in = new Scanner (new BufferedInputStream (System.in));
24+
int n = in.nextInt ();
25+
int i, j, k;
26+
27+
ArrayList<E> [] a = new ArrayList [n + 1];
28+
int [] dis = new int[n];
29+
int [] disx = new int[n];
30+
int [] disy = new int[n];
31+
32+
int mx, my, x, y;
33+
34+
for (i = 0; i < n; ++i)
35+
a[i] = new ArrayList<E> ();
36+
37+
for (i = 1; i < n; ++i) {
38+
j = in.nextInt (); --j;
39+
k = in.nextInt ();
40+
a[i].add (new E (j, k));
41+
a[j].add (new E (i, k));
42+
}
43+
44+
Arrays.fill(dis, -1);
45+
Arrays.fill(disx, -1);
46+
Arrays.fill(disy, -1);
47+
48+
Queue<Integer> q = new LinkedList<Integer> ();
49+
q.add (1);
50+
dis[1] = 0; mx = -1; my = -1; x = 0; y = 0;
51+
while (!q.isEmpty()) {
52+
int u = q.poll();
53+
for (E e : a[u]) {
54+
int v = e.x, d = e.d;
55+
if (dis[v] == -1) {
56+
dis[v] = dis[u] + d;
57+
if (dis[v] > mx) {
58+
mx = dis[v];
59+
x = v;
60+
}
61+
q.add (v);
62+
}
63+
}
64+
}
65+
66+
q.add (x);
67+
disx[x] = 0;
68+
while (!q.isEmpty()) {
69+
int u = q.poll ();
70+
for (E e : a[u]) {
71+
int v = e.x, d = e.d;
72+
if (disx[v] == -1) {
73+
disx[v] = disx[u] + d;
74+
if (disx[v] > my) {
75+
my = disx[v];
76+
y = v;
77+
}
78+
q.add(v);
79+
}
80+
}
81+
}
82+
83+
q.add (y);
84+
disy[y] = 0;
85+
while (!q.isEmpty()) {
86+
int u = q.poll ();
87+
for (E e : a[u]) {
88+
int v = e.x, d = e.d;
89+
if (disy[v] == -1) {
90+
disy[v] = disy[u] + d;
91+
q.add(v);
92+
}
93+
}
94+
}
95+
for (i = 0; i < n; ++i)
96+
System.out.printf("%d\n", Math.max (disx[i], disy[i]));
97+
}
98+
99+
public static void main(String[] args) {
100+
Solution solution = new Solution ();
101+
solution.solve ();
102+
}
103+
104+
}
105+

0 commit comments

Comments
 (0)