| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
此题不够严密,关于每个点访问次数的问题先贴一下代码,大牛们注意看打注释的部分
#include <iostream>
#include <vector>
using namespace std;
#define maxn 11
#define inf 0x3f3f3f3f
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
struct Pay
{
int node, did, didnot;
};
vector<Pay> pay[maxn][maxn];
bool map[maxn][maxn];
int vis[maxn];
int n, m, maxlen, money;
void init()
{
int i, j;
for (i=1; i<=n; i++)
{
for (j=1; j<=n; j++)
{
pay[i][j].clear();
}
}
maxlen = inf;
memset(map, 0, sizeof(map));
memset(vis, 0, sizeof(vis));
}
void dfs(int k,int mon)
{
if (k == n)
{
maxlen = min(maxlen, mon);
return ;
}
int i;
for (i=1; i<=n; i++)
{
if (map[k][i] && vis[i]<3)/*这里,原本我弄得是2,但是wa,后来仔细想了想,弄成3,于是A了,但是后来又找了一组测试数据,符合输入条件,但是结果却是错的。数据在下面*/
{
int minm = inf;
int j;
for (j=0; j<pay[k][i].size(); j++)
{
if (vis[pay[k][i][j].node])
{
minm = min(minm, pay[k][i][j].did);
}
else
{
minm = min(minm, pay[k][i][j].didnot);
}
}
vis[i]++;
dfs(i, mon+minm);
vis[i]--;
}
}
}
int main()
{
while (scanf("%d %d",&n, &m) != EOF)
{
init();
for (int i=0; i<m; i++)
{
int a, b;
Pay p;
scanf("%d %d %d %d %d", &a, &b, &p.node, &p.did, &p.didnot);
map[a][b] = 1;
pay[a][b].push_back(p);
}
vis[1]++;
dfs(1, 0);
if (maxlen == inf)
{
puts("impossible");
}
else
{
printf("%d\n", maxlen);
}
}
return 0;
}
测试数据:
8 10
1 2 1 10 100
1 3 1 10 100
1 4 1 10 100
1 7 1 10 100
2 1 2 10 100
4 1 2 10 100
7 1 2 10 100
3 5 2 12 10000
5 6 4 13 10000
6 8 7 14 10000
本来结果 109,但实际结果10075,原因就是,有时候需要访问一个点4次甚至5次才可以通过。。。但是这道题,访问3次就可以A掉
把上面的3才成4,就完全正确
奇怪的是。。。。4居然是0MS~~~3居然需要16MS!!!
10155514 671superone 3411 Accepted 180K 0MS C++ 1378B 2012-05-05 07:23:33
10153154 671superone 3411 Accepted 180K 16MS C++ 1378B 2012-05-04 17:17:29
希望大家看了能有所帮助!
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator