Pagini recente » Cod sursa (job #136888) | Cod sursa (job #3004059) | Cod sursa (job #806151) | Cod sursa (job #495822) | Cod sursa (job #765422)
Cod sursa(job #765422)
#include <fstream>
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
#define MAXN 110000
vector<pair<int,int> > v(MAXN);
int arb[MAXN * 100];
int getArb(int a) {
if (arb[a] == a)
return a;
arb[a] = getArb(arb[a]);
return arb[a];
}
void uneste(int a, int b) {
arb[a] = arb[b];
}
bool cmp(pair<int, int> a, pair<int, int> b) {
return a.first > b.first;
}
long long n, x, l, sol;
int main() {
int a, t, tmax = 0, i;
fin >> n >> x >> l;
for (i = 1; i <= n; ++i) {
fin >> t >> a;
if (x > t)
v[i].second = (x - t) / l + 1;
else
v[i].second = 0;
v[i].first = a;
if (v[i].second > tmax)
tmax = v[i].second;
}
sort (v.begin() + 1, v.begin() + n + 1, cmp);
for(i = 1; i <= tmax; ++i) {
arb[i] = i;
}
for (i = 1; i <= n; ++i) {
if (getArb(v[i].second) != 0) {
sol += v[i].first;
uneste(getArb(v[i].second), getArb(v[i].second) - 1);
}
}
fout << sol << "\n";
return 0;
}