D
#include <bits/stdc++.h>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define line cout<<"-------"<<endl
typedef long long ll;
const int maxn = 1e5 + 10;
const int MAXN = 1e6 +10;
const int INF = 0x3f3f3f3f;
const int N = 1010;
int n, m, x, xf;
int head[MAXN], headf[MAXN], dis[MAXN], cnt[MAXN];
bool vis[MAXN];
struct node{
int v, dis, f, Next;
friend bool operator < (node a,node b) {
return a.f>b.f;
}
};
node edge[MAXN], edgef[MAXN];
void add(int u, int v, int dis){
edge[x].v = v;
edge[x].dis = dis;
edge[x].Next = head[u];
head[u] = x;
edgef[x].v = u;
edgef[x].dis = dis;
edgef[x].Next = headf[v];
headf[v] = x++;
}
void spfa(int s, int t){
int u, v, i, j;
queue<int> q;
clr(vis); clr(cnt);
for(i=0; i<=n; ++i) dis[i] = INF;
vis[s] = 1; dis[s] = 0;
q.push(s);
while(!q.empty()){
u = q.front();
q.pop();
vis[u] = 0;
cnt[u]++;
if(cnt[u] >= n) return ;
for(j = headf[u]; ~j; j = edgef[j].Next){
if(dis[v=edgef[j].v] > dis[u]+edgef[j].dis){
dis[v] = dis[u] + edgef[j].dis;
if(!vis[v]) {
vis[v] = 1;
q.push(v);
}
}
}
}
}
int A_star(int s,int t,int k){
int cnt = 0, i;
node e, next;
priority_queue<node> q;
if(s == t) k++;
if(dis[s] == INF) return -1;
e.v = s; e.dis = 0; e.f = dis[s]; q.push(e);
while(!q.empty()){
e = q.top();
q.pop();
if(e.v == t && ++cnt == k) return e.dis;
for(i = head[e.v]; ~i; i=edge[i].Next){
next.v = edge[i].v;
next.dis = e.dis + edge[i].dis;
next.f = next.dis + dis[next.v];
q.push(next);
}
}
return -1;
}
int main(){
while(scanf("%d%d", &n, &m) != EOF){
clr(edge); clr(edgef); clr(dis);
int s, t, k, Ti;
scanf("%d%d%d%d", &s, &t, &k, &Ti);
memset(head,-1, sizeof(head));
memset(headf,-1, sizeof(headf));
int u, v, x;
for (int i = 0; i <m ; ++i) {
scanf("%d%d%d", &u, &v, &x);
add(u, v, x);
}
spfa(t, s);
int T = A_star(s, t, k);
if(T > Ti || T == -1) puts("Whitesnake!");
else puts("yareyaredawa");
}
return 0;
}
K
#include<bits/stdc++.h>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define line cout<<"------------"<<endl
typedef long long ll;
const int maxn = 1e5+10;
const int MAXN = 1e6+10;
const int INF = 0x3f3f3f3f;
const int N = 110;
int pre[] = {1, 2, 3, 5, 7, 11, 13, 17, 23, 31, 37, 53, 71, 73, 113, 131, 137, 173, 311, 317};
char s[maxn];
int main(){
int t, cas = 1;
scanf("%d", &t);
while(t--){
scanf("%s", s);
int len = strlen(s);
printf("Case #%d: ", cas++);
if(len >= 4) {
puts("317");
}
else{
int p = 0;
for(int i=0; i<len; i++){
p = p*10 + (s[i]-'0');
}
int pos = lower_bound(pre, pre+20, p) - pre;
if(p != pre[pos]) pos--;
printf("%d\n", pre[pos]);
}
}
return 0;
}