編輯:關於Android編程
————————————————————————————————————
題目大意: 有向圖,點有點權,要求從入度為0點開始,以出度為0點作為終點,求一條權值最大的有向路徑使經過點的點權和最大(可能存在負值)。
————————————————————————————————————
題目思路:拓撲排序 + dp
————————————————————————————————————
題目細節:
1、本題用到了vector ,可作為vector的一例參考、
2、由於沒有加 v.clear() ,使得一開始超時了。(謝過某位同學!)
3、本題的dp部分可以用隊列來做。
————————————————————————————————————
源代碼:
[cpp]
#include<stdio.h>
#include<stdlib.h>
#include<vector>
using namespace std;
#define MAX 2147483647
vector<int> v[100010];
int in[100010];
int out[100010];
long long dp[100010];
int val[100010];
int vis[100010];
long long max(long long a, long long b)
{
if(a>b) return a;
else return b;
}
int main()
{
int n = 0,m = 0;
int i = 0,j = 0;
int x = 0,y = 0;
long long maxn = 0;
int c = 0,t = 0;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i = 1;i<=n;i++)
{
scanf("%d",&val[i]);
in[i] = 0;
out[i] = 0;
vis[i] = 0;
dp[i] = -MAX;
v[i].clear();
}
for(i = 0;i<m;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
out[x]++;
in[y]++;
}
for(i = 1;i<=n;i++)
if(in[i] == 0)
dp[i] = val[i];
c = 1;
while(c<n)
{
for(i = 1;i<=n;i++)
{
if(!vis[i] && in[i] == 0)
{
c++;
vis[i] = 1;
for(j = 0;j<v[i].size();j++)
{
t = v[i][j]; www.2cto.com
dp[t] = max(dp[t],dp[i]+val[t]);
in[t]--;
}
}
}
}
maxn = -MAX;
for(i = 1;i<=n;i++)
{
if(out[i] == 0 && dp[i]>maxn)
maxn = dp[i];
}
printf("%lld\n",maxn);
}
return 0;
}
0、關於注冊賬號就不用說了。1、創建應用、獲取appkey0、創建應用1、填寫信息2、獲取appkey2、集成0、首先新建一個工程1、這裡主要介紹使用ease
Fiddler是一款免費的抓包、調試工具,比Wireshark要小巧,更簡潔,本節就來介紹如何通過WIFI來抓取Android手機的HTTP和HTTPS包。一、連接And
本文實例講述了Android自定義圓形進度條,分享給大家供大家參考。具體如下:運行效果截圖如下:具體代碼如下:自定義的View:import com.example.ci
南丁格爾玫瑰圖 在常規圖表中實在很驚艷,但我初看沒看懂,一查原來南丁格爾這麼偉大,確實值得尊敬。再仔細研究了下這種圖的構成,發現原來就是把柱形圖的柱形換成了扇形圖的半徑來