标签:memory 避免 style ios diff etc cannot amp text
InputThe first line contains an integer T (1≤T≤6)T (1≤T≤6), the number of test cases. Then TT test cases
follow.
The first line of input contains nn and mm. 2≤n≤1052≤n≤105. The following mm lines describe the sets Ei (1≤i≤m)Ei (1≤i≤m). Each line will contain two integers ti(1≤ti≤109)ti(1≤ti≤109) and Si (Si>0)Si (Si>0) firstly. Then SiSi integer follows which are the labels of blocks in EiEi. It is guaranteed that ∑mi=1Si≤106∑i=1mSi≤106.OutputFor each test case, if they cannot have the meeting, then output "Evil John" (without quotes) in one line.
Otherwise, output two lines. The first line contains an integer, the time it takes for they to meet.
The second line contains the numbers of blocks where they meet. If there are multiple
optional blocks, output all of them in ascending order.Sample Input
2 5 4 1 3 1 2 3 2 2 3 4 10 2 1 5 3 3 3 4 5 3 1 1 2 1 2
Sample Output
Case #1: 3 3 4 Case #2: Evil John
可以将给顶集合的元素连到一个虚拟结点上,求出最短路来再/2,这样避免了大量的重复加边,还避免了小数
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<sstream> #include<algorithm> #include<queue> #include<vector> #include<cmath> #include<map> #include<stack> #include<set> #include<memory> #include<bitset> #include<string> #include<functional> using namespace std; typedef long long LL; typedef unsigned long long ULL; const int MAXN = 5e5 ; #define INF 0x3f3f3f3f /* 连接虚拟结点 到该点的距离为L 求出最短路/2 避免小数! */ LL T, d, n, m, cnt; struct edge { edge(LL _a,LL _b):to(_a),cost(_b){} LL to, cost; }; vector<edge>E[MAXN]; LL dist1[MAXN], dist2[MAXN]; bool vis[MAXN]; void addedge(LL f,LL to,LL dis) { E[f].push_back(edge(to, dis)); E[to].push_back(edge(f, dis)); } void init() { for (LL i = 0; i < MAXN; i++) E[i].clear(); } void spfa(LL beg, LL lowcost[]) { queue<LL> q; memset(vis, false, sizeof(vis)); for (int i = 0; i <= n + m; i++) lowcost[i] = INF; lowcost[beg] = 0; vis[beg] = true; q.push(beg); while (!q.empty()) { LL f = q.front(); q.pop(); vis[f] = false; for (int i = 0; i < E[f].size(); i++) { if (lowcost[E[f][i].to] > lowcost[f] + E[f][i].cost) { lowcost[E[f][i].to] = lowcost[f] + E[f][i].cost; if (!vis[E[f][i].to]) { vis[E[f][i].to] = true; q.push(E[f][i].to); } } } } } int main() { scanf("%lld", &T); for(LL cas = 1;cas <= T; cas++) { init(); scanf("%lld%lld", &n, &m); LL tmp, tt; for (LL i = 1; i <= m; i++) { scanf("%lld%lld", &d, &tmp); while (tmp--) { scanf("%lld", &tt); addedge(tt, n + i, d); } } spfa(1, dist1); spfa(n , dist2); LL ans = INF; for (int i = 0; i <= n; i++) ans = min(ans, max(dist1[i], dist2[i])); if (ans == INF) printf("Case #%lld: Evil John\n", cas); else { printf("Case #%lld: %lld\n", cas, ans / 2); bool f = false; for (int i = 1; i <= n; i++) { if (max(dist1[i], dist2[i]) == ans) { if (!f) printf("%d", i), f = true; else printf(" %d", i); } } printf("\n"); } } }
标签:memory 避免 style ios diff etc cannot amp text
原文地址:http://www.cnblogs.com/joeylee97/p/7395535.html