Pagini recente » Cod sursa (job #2025027) | Cod sursa (job #907419) | Cod sursa (job #154005) | Cod sursa (job #2777551) | Cod sursa (job #1853586)
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#define MAXN 760
#define MAXK 16
#define inf 0x3f3f3f3f
using namespace std;
int dk[MAXK], best[MAXN], cost[MAXN][MAXN], cap[MAXN][MAXN];
int dist[MAXK][MAXK][MAXK];
int n, k, m;
vector<int> graf[MAXN];
struct cmp
{
bool operator()(const int &x, const int &y)
{
return best[x] > best[y];
}
};
priority_queue<int, vector<int>, cmp> heap;
void dijkstra(int src, int capmin)
{
for (int i = 0; i <= n; i++)
best[i] = inf;
best[dk[src]] = 0;
heap.push(dk[src]);
while (!heap.empty())
{
int nod = heap.top();
heap.pop();
for (int y : graf[nod])
if (cap[nod][y] >= capmin && best[nod] + cost[nod][y] < best[y])
{
best[y] = best[nod] + cost[nod][y];
heap.push(y);
}
}
for (int i = 1; i <= k; i++)
dist[capmin][src][i] = best[dk[i]];
}
int din[1<<MAXK][MAXK]; /// dist min pentru a ajunge la nodul j cu prizionierii i
int cati(int nr)
{
int rez = 0;
while (nr)
{
rez += nr & 1;
nr >>= 1;
}
return rez;
}
void solve()
{
for (int i = 0; i < (1<<MAXK); i++)
for (int j = 0; j < MAXK; j++)
din[i][j] = inf;
din[1][0] = 0;
for (int i = 0; i < (1<<MAXK); i++)
{
for (int j = 0; j < MAXK; k++)
{
if (!(i & (1 << j))) continue;
for (int v = 0; v < MAXK; v++)
if (i!= v && (i & (1<<v)))
{
int c = cati(i^(1<<v));
din[i][j] = min(din[i][j], din[i^(1<<v)][v] + dist[c][v+1][j+1] * c);
}
}
}
int sol = inf;
for (int i = 0; i < MAXK; i++)
sol = min(sol, din[(1<<MAXK)-1][i]);
}
int main()
{
freopen("gather.in", "r", stdin);
freopen("gather.out", "w", stdout);
printf("Helo");
// scanf("%d %d %d", &k, &n, &m);
// for (int i = 1; i <= k; i++) {
// scanf("%d", &dk[i]);
// //cdk[dk[i]] = i;
// }
// for (int i = 1; i <= m; i++) {
// int a, b, c, d;
// scanf("%d %d %d %d", &a, &b, &c, &d);
// graf[a].push_back(b);
// graf[b].push_back(a);
// cost[a][b] = cost[b][a] = c;
// cap[a][b] = cap[b][a] = d;
// }
// for (int i = 1; i <= k; i++)
// for (int j = 0; j <= k; j++)
// dijkstra(i, j);
// solve();
return 0;
}