二分答案
2015-03-22 16:04
225 查看
hihocoder上的题目,之前codeforces又一次也用到过这种方法,直接对答案进行二分,并且根据题意验证。当对一道题目毫无头绪的时候,可以试试这种神奇的方法。
#include <iostream> #include <algorithm> #include <queue> #include <cstdio> #include <cstring> using namespace std; int n,m,k,t,size=0; int vis[10010]={false}; struct EDGE{ int v,w; struct EDGE* next; }e[2000010]; struct EDGE* p[10010]={NULL}; void addedge(int a,int b,int value) { e[size].next=p[a]; p[a]=&e[size]; e[size].v=b;e[size].w=value; size++; } bool f(int x) { memset(vis,0,sizeof(vis)); queue<int> h; h.push(1); while(!h.empty()){ int a=h.front();h.pop(); if(a==t) return true; if(vis[a]==k) continue; for(struct EDGE* u=p[a];u;u=u->next){ int v=u->v; if(vis[v]||u->w>x) continue; vis[v]=vis[a]+1; h.push(v); } } return false; } int main() { //freopen("in.txt","r",stdin); int temp=0; cin>>n>>m>>k>>t; for(int i=0;i<m;i++){ int a,b,w; scanf("%d%d%d",&a,&b,&w); addedge(a,b,w);addedge(b,a,w); temp=max(temp,w); } int l=0,h=temp,mid; while(l<h){ mid=(l+h)>>1; if(f(mid)) h=mid; else l=mid+1; } cout<<l<<endl; return 0; }
相关文章推荐
- #1139 : 二分·二分答案
- BZOJ 4326: NOIP2015 运输计划 二分答案 树上差分
- bzoj 2095: [Poi2010]Bridges 二分答案+网络流
- CodeForces - 551C (二分查找答案+贪心)
- 【BZOJ2440】完全平方数(中山市选2011)-二分答案+莫比乌斯函数应用
- NOIP模拟题 2016.10.5 [Trie] [数学] [二分答案] [杂题] [复杂状态DP]
- BZOJ 1570: [JSOI2008]Blue Mary的旅行( 二分答案 + 最大流 )
- Codeforce 85E (二分答案+二分图染色)
- HDU 4004(The Frog's Games) 二分查找求答案
- codevs 1183 泥泞的道路(二分答案+spfa验证)
- 洛谷 P3407 散步 (二分答案+判定 或 模拟)
- bzoj2095 [Poi2010]Bridges(二分答案+混合图欧拉回路,最大流)
- HDU-4190 Problem D【二分答案】
- hihocoder hiho第38周: 二分·二分答案 (二分搜索算法应用:二分搜索值+bfs判断可行性 )
- 505. 城市(二分答案)
- 51nod1799 二分答案
- HDU 3943 —— K-th Nya Number(数位DP,二分答案)
- POJ 2601 Simple calculations 利用单调性,二分找出答案
- poj 2976(01分数规划搜索+二分答案)
- 【bzoj 十连测】[noip2016十连测第三场]Problem A: 平均数(二分答案+归并排序求逆序对)