int main () { scanf ("%d", &n); memset(ne, ~0, sizeof ne); memset(he, ~0, sizeof he); for (int i = 1, j = 0; i <= n * 2; i++) { while((1 << j) <= i)j++; log2[i] = j - 1; } for (int i = 1, x, y, z; i < n; i++) { scanf("%d", &x); x--; y = i; z = 1; e[nn] = y; w[nn] = z; ne[nn] = he[x]; he[x] = nn++; } dfs(0); init_st(); for (int i = mm - 1; i >= 0; i--) f[list[i]] = i; ans = (1 << 30); for (int i = 0; i < n; i++) { int s = 0; for (int j = 0; j < n; j++) { s = max(s, dist[i] + dist[j] - 2 * dist[lca(i, j)]); } if (s < ans) { ans = s; mmm = 0; } if (s == ans) Ans[mmm++] = i + 1; } for (int i = 0; i < mmm; i++) printf("%d ", Ans[i]); return 0; }
///////////////////////////////////////////////// // 主函数 ///////////////////////////////////////////////// int main(int argc, char* argv[]) { // 初始化绘图窗口及颜色 setinitmode(0x005, 0, 0); if (argc < 2) { MessageBoxW(NULL, L"本屏幕保护程序无配置", L"JuliaSet", MB_OK); return 0; } else if (stricmp(argv[1], "/p") == 0) { HWND hwnd; sscanf(argv[2], "%d", &hwnd); attachHWND(hwnd); setinitmode(0x107, 0, 0); } else if (stricmp(argv[1], "/s")) { MessageBoxW(NULL, L"本屏幕保护程序无配置", L"JuliaSet", MB_OK); return 0; } //initgraph(320, 240); initgraph(-1, -1); randomize(); showmouse(0); FlushMouseMsgBuffer(); while(kbhit()) getch(); //InitColor(); InitLog(); g_w = getwidth(NULL); g_h = getheight(NULL); g_st = (state*)malloc(g_w * g_h * sizeof(state)); COMPLEX c = {0.262, 0.002}, z = {0, 0}; double r = 1.5, d = g_w / (double)g_h, rotate = 0, sr = sin(rotate), cr = cos(rotate); init_st(g_w, g_h); int n_update = 0; double ftime = fclock(); { double dc = 64, dca = 128, db = 16; col_r = randomf() * dc + db; col_g = randomf() * dc + db; col_b = randomf() * dc + db; col_ar = randomf() * dca; col_ag = randomf() * dca; col_ab = randomf() * dca; rotate = randomf() * 360; sr = sin(rotate), cr = cos(rotate); } setrendermode(RENDER_MANUAL); for (int loop = 1; kbmouhit() == 0; ++loop) { int ret; if (loop <= 4) { ret = JDraw(c, z.re - r * d, z.im - r, z.re + r * d, z.im + r, sr, cr); if (loop == 4) { g_udlist.swap(); for(int y=0; y<g_h; y++) { for(int x=0; x<g_w; x++) { if (g_st[y * g_w + x].ed == 0) { g_udlist.push(x, y); } } } g_udlist.swap(); } } else { static int t = 0; ret = JDrawA(c, z.re - r * d, z.im - r, z.re + r * d, z.im + r); if (clock() - t > 30) { delay(1); t = clock(); } } if (g_updatepoint == 0) { n_update++; } else { n_update = 0; } if (0) { char str[500]; sprintf(str, "%d %d %f %f", g_w, g_h, r, d); outtextxy(0, 0, str); } if (ret == 0 || n_update > 8 || loop > 1000) { loop = 0; if (g_mi[0][0] == 0) { delay(1); memset(pMap, 0, BF_W * BF_H * sizeof(state)); g_udlist.clear(); for (int i = 0; i < BF_W; ++i) { addpoint(i, 0); addpoint(i, BF_H - 1); } for (int i = 0; i < 4; ) { if (MDraw(-1.9, -1.2, 0.5, 1.2) == 0) { ++i; } else { i = 0; } if (kbmouhit()) return 0; } } double dc = 64, dca = 128, db = 16; col_r = randomf() * dc + db; col_g = randomf() * dc + db; col_b = randomf() * dc + db; col_ar = randomf() * dca; col_ag = randomf() * dca; col_ab = randomf() * dca; rotate = randomf() * 360; sr = sin(rotate), cr = cos(rotate); do { c.re = randomf() * 2.4 - 1.9; c.im = randomf() * 2.4 - 1.2; int ir = (int)((c.re - (-1.9)) / (0.5 - (-1.9)) * BF_W); int im = (int)((c.im - (-1.2)) / (1.2 - (-1.2)) * BF_H); if (g_mi[im][ir] >= 16) { break; } } while (1); init_st(g_w, g_h); n_update = 0; if (fclock() - ftime < 3) { delay_ms((int)((3 - (fclock() - ftime)) * 1000)); } else { delay(1); } ftime = fclock(); } } closegraph(); return 0; }
int tracing_start(uint32_t pid, const char *filename) { /* Copy trace filename to global variable */ strncpy(tracename, filename, 128); /* Set name for functions file */ snprintf(functionsname, 128, "%s.functions", filename); /* If previous trace did not close properly, close files now */ if (tracelog) close_trace(tracelog); if (tracenetlog) fclose(tracenetlog); /* Initialize trace file */ tracelog = fopen(filename, "w"); if (0 == tracelog) { perror("tracing_start"); tracepid = 0; tracecr3 = 0; return -1; } setvbuf(tracelog, filebuf, _IOFBF, FILEBUFSIZE); /* Initialize netlog file */ char netname[128]; snprintf(netname, 128, "%s.netlog", filename); tracenetlog = fopen(netname, "w"); if (0 == tracenetlog) { perror("tracing_start"); tracepid = 0; tracecr3 = 0; return -1; } else { fprintf(tracenetlog, "Flow Off Data\n"); fflush(tracenetlog); } /* Set PID and CR3 of the process to be traced */ tracecr3 = find_cr3(pid); if (0 == tracecr3) { monitor_printf(default_mon, "CR3 for PID %d not found. Tracing all processes!\n",pid); tracepid = -1; } else { tracepid = pid; } monitor_printf(default_mon, "PID: %d CR3: 0x%08x\n", tracepid, tracecr3); /* Initialize disassembler */ xed2_init(); /* Clear trace statistics */ clear_trace_stats(); /* Clear skip taint flags */ init_st(); /* Initialize hooks only for this process */ decaf_plugin->monitored_cr3 = tracecr3; /* Get system start usage */ if (getrusage(RUSAGE_SELF, &startUsage) != 0) monitor_printf (default_mon, "Could not get start usage\n"); // If tracing child, load process tracking hooks if (tracing_child) { trackproc_start(pid); load_hooks_in_plugin(&tracecr3, "group_process.so", hook_dirname); } /* Register block and instruction callbacks */ block_begin_cb_handle = DECAF_register_callback(DECAF_BLOCK_BEGIN_CB, tracing_block_begin, NULL); insn_begin_cb_handle = DECAF_register_callback(DECAF_INSN_BEGIN_CB, tracing_insn_begin, &should_monitor); insn_end_cb_handle = DECAF_register_callback(DECAF_INSN_END_CB, tracing_insn_end, &should_monitor); return 0; }