編輯:關於Android編程
幽幽子
[html]
#include <cstdio>
#include <cstring>
#define N 100010
#define M 400010
#define INF 999999999
int n,m,s,a,b;
int head[N],cnt;
struct Edge
{
int v,next,w;
}edge[M];
struct Heap
{
int d,v,p;
}heap[N];
int hl,pos[N];
void addedge(int u,int v,int w)
{
edge[cnt].next=head[u]; edge[cnt].v=v; edge[cnt].w=w;
head[u]=cnt++;
}
void swap(int a,int b)
{
heap[0]=heap[a]; heap[a]=heap[b]; heap[b]=heap[0];
pos[heap[a].v]=a; pos[heap[b].v]=b;
}
void heapfy()
{
int i=2;
while (i<=hl)
{
if(i+1<=hl && heap[i+1].d<heap[i].d)i++;
if(heap[i].d<heap[i>>1].d)
{
swap(i,i>>1);
i<<=1;;
}
else break;
}
}
void decrease(int i)
{
while (i!=1 && heap[i].d<heap[i>>1].d)
{
swap(i,i>>1); i>>=1;
}
}
void relax(int u,int v,int w)
{
if(heap[pos[u]].d+w<heap[pos[v]].d)
{
heap[pos[v]].d=heap[pos[u]].d+w;
decrease(pos[v]);
}
}
void dijkstra(int s,int n)
{
int u,i;
for(i=1;i<=n;i++)
{
heap[i].v=pos[i]=i; heap[i].d=INF;
}
heap[s].p=s; heap[s].d=0; swap(1,s); hl=n;
while (hl)
{
u=heap[1].v;
swap(1,hl);
hl--;
heapfy();
for(i=head[u];i!=-1;i=edge[i].next)
if(pos[edge[i].v]<=hl) relax(u,edge[i].v,edge[i].w);
}
}
int main ()
{
int ds1,ds2,dab;
while (scanf("%d%d%d%d%d",&m,&n,&s,&a,&b)!=-1)
{
cnt=0;
memset(head,-1,sizeof(head));
while (m--)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
dijkstra(s,n);
ds1=heap[pos[a]].d;
ds2=heap[pos[b]].d;
dijkstra(a,n);
dab=heap[pos[b]].d;
printf("%d\n",dab+(ds1<ds2?ds1:ds2));
}
return 0;
}
谷歌在安卓上提供了一個序列化接口——Parcelable,它表示比java傳統的序列化接口效率更高,然而現實是它不是自動化的,所以它的效果是很坑爹
在項目中,有時候在一些控件(如Button、TextView)中要添加一些符號,如下圖所示: 這個時候可以使用圖片的方式來顯
我們在做Android開發的時候經常會遇到後台線程執行的比如說下載文件的時候,這個時候我們希望讓客戶能看到後台有操作進行,這時候我們就可以使用進度條,那麼既然在後台運行,
嘗試了用android studio中使用gradle打多渠道的程序包,果然如傳說中那樣神奇。本文中部分是參考Google上的內容,權當學習記錄在這裡吧 1